On Mon, Mar 06, 2017 at 12:07:51PM -0700, Jason Gunthorpe wrote: > On Mon, Mar 06, 2017 at 12:18:09PM -0600, Shiraz Saleem wrote: > > On Thu, Feb 16, 2017 at 12:23:01PM -0700, Jason Gunthorpe wrote: > > > Use our standard versions from util instead. There doesn't seem > > > to be anything tricky here, but the inlined versions were like our > > > wc_wmb() barriers, not the wmb(). > > > > > > There appears to be no WC memory in this driver, so despite the comments, > > > these barriers are also making sure that user DMA data is flushed out. Make > > > them all wmb() > > > > > > Guess at where the missing rmb() should be. > > > > > > Signed-off-by: Jason Gunthorpe <jgunthorpe@xxxxxxxxxxxxxxxxxxxx> > > > > > > > @@ -780,6 +780,8 @@ static enum i40iw_status_code i40iw_cq_poll_completion(struct i40iw_cq_uk *cq, > > > if (polarity != cq->polarity) > > > return I40IW_ERR_QUEUE_EMPTY; > > > > > > + udma_from_device_barrier(); > > > + > > > > What is the need for the barrier here? > > Every driver doing DMA needs to have a rmb(), I guessed this is > approximately the right place to put it for i10iw. > > Within the PCI producer/consumer model the rmb needs to be placed > after the CPU observes a DMA write that proves other DMA writes have > occured. > > It serializes the CPU with the write stream from PCI and prevents the > compiler/CPU from re-ordering dependent loads to be before the proving > load. > OK. This change makes sense. ACK. -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html