On Tue, Jul 30, 2019 at 2:15 PM <guoren@xxxxxxxxxx> wrote: > > From: Guo Ren <ren_guo@xxxxxxxxx> > > If arch didn't define dma_r/wmb(), linux will use w/rmb instead. Csky > use bar.xxx to implement mb() and that will cause problem when sync data > with dma device, becasue bar.xxx couldn't guarantee bus transactions > finished at outside bus level. We must use sync.s instead of bar.xxx for > dma data synchronization and it will guarantee retirement after getting > the bus bresponse. > > Signed-off-by: Guo Ren <ren_guo@xxxxxxxxx> This change looks good to me, but I think your regular barriers (mb, rmb, wmb) are still wrong: These are meant to be the superset of dma_{r,w}mb and smp_{,r,w}mb, and synchronize against both SMP and DMA interactions. I suspect you can drop the '.s' for non-SMP builds. What I don't see is whether you might need to add '.i' for dma_wmb() or dma_rmb(). Arnd