On Wed, Feb 27, 2019 at 12:12:51PM -0500, Mikulas Patocka wrote: > > > On Tue, 26 Feb 2019, Linus Torvalds wrote: > > > Does anybody see any worries with the "just move the mb() earlier in > > the ioread functions" model? > > > > Linus > > It used to be like that and it worked. > > Then, commits cd0e00c106722eca40b38ebf11cf134c01901086 and > 92d7223a74235054f2aa7227d207d9c57f84dca0 came. > > These commits claim that they changed the code to be consistent with the > specification (now we have barrier after ioread and before iowrite). But > they broke serial port and RTC on my Alpha machine. I suppose you might need the mb() before *and* after the I/O access in the read case. The idea with readX()/ioreadX() is that you should be able to do something like: status = ioread8(STATUS_REG); if (status & RX_DMA_COMPLETE) memcpy(mem_buf, dma_buf, size); and rely on the DMA'd data being read out of the buffer. Will