16/01/2018 10:10, Jianbo Liu: > The 01/16/2018 10:49, Andrew Rybchenko wrote: > > On 01/16/2018 04:10 AM, Yongseok Koh wrote: > > >This commit introduces rte_dma_wmb() and rte_dma_rmb(), in order to > > >guarantee the ordering of coherent shared memory between the CPU and a DMA > > >capable device. > > > > > >Signed-off-by: Yongseok Koh <ys...@mellanox.com> > > >--- > > > lib/librte_eal/common/include/generic/rte_atomic.h | 18 > > > ++++++++++++++++++ > > > 1 file changed, 18 insertions(+) > > > > > >diff --git a/lib/librte_eal/common/include/generic/rte_atomic.h > > >b/lib/librte_eal/common/include/generic/rte_atomic.h > > >index 16af5ca57..2e0503ce6 100644 > > >--- a/lib/librte_eal/common/include/generic/rte_atomic.h > > >+++ b/lib/librte_eal/common/include/generic/rte_atomic.h > > >@@ -98,6 +98,24 @@ static inline void rte_io_wmb(void); > > > */ > > > static inline void rte_io_rmb(void); > > >+/** > > >+ * Write memory barrier for coherent memory between lcore and IO device > > >+ * > > >+ * Guarantees that the STORE operations on coherent memory that > > >+ * precede the rte_dma_wmb() call are visible to I/O device before the > > >+ * STORE operations that follow it. > > >+ */ > > >+static inline void rte_dma_wmb(void); > > >+ > > >+/** > > >+ * Read memory barrier for coherent memory between lcore and IO device > > >+ * > > >+ * Guarantees that the LOAD operations on coherent memory updated by > > >+ * IO device that precede the rte_dma_rmb() call are visible to CPU > > >+ * before the LOAD operations that follow it. > > >+ */ > > >+static inline void rte_dma_rmb(void); > > >+ > > > #endif /* __DOXYGEN__ */ > > > /** > > > > I'm not an ARMv8 expert so, my comments could be a bit ignorant. > > I'd like to understand the difference between io and added here dma > > barriers. > > The difference should be clearly explained. Otherwise we'll constantly hit > > on incorrect choice of barrier type. > > Also I don't understand why "dma" name is chosen taking into account > > that definition is bound to coherent memory between lcore and IO device. > > A good explanation can be found here. > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1077fa36f23e259858caf6f269a47393a5aff523
I agree that something more is needed to explain when to use rte_io_*. The only difference between rte_io_* and rte_dma_* is "on coherent memory".