eal: introduce coherent I/O memory barriers
This commit introduces rte_cio_wmb() and rte_cio_rmb(), in order to guarantee the ordering of coherent shared memory between the CPU and a DMA capable device. Signed-off-by: Yongseok Koh <yskoh@mellanox.com> Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
This commit is contained in:
parent
9bea9e865a
commit
cd36cc49e5
@ -110,6 +110,45 @@ static inline void rte_io_wmb(void);
|
||||
static inline void rte_io_rmb(void);
|
||||
///@}
|
||||
|
||||
/** @name Coherent I/O Memory Barrier
|
||||
*
|
||||
* Coherent I/O memory barrier is a lightweight version of I/O memory
|
||||
* barriers which are system-wide data synchronization barriers. This
|
||||
* is for only coherent memory domain between lcore and I/O device but
|
||||
* it is same as the I/O memory barriers in most of architectures.
|
||||
* However, some architecture provides even lighter barriers which are
|
||||
* somewhere in between I/O memory barriers and SMP memory barriers.
|
||||
* For example, in case of ARMv8, DMB(data memory barrier) instruction
|
||||
* can have different shareability domains - inner-shareable and
|
||||
* outer-shareable. And inner-shareable DMB fits for SMP memory
|
||||
* barriers and outer-shareable DMB for coherent I/O memory barriers,
|
||||
* which acts on coherent memory.
|
||||
*
|
||||
* In most cases, I/O memory barriers are safer but if operations are
|
||||
* on coherent memory instead of incoherent MMIO region of a device,
|
||||
* then coherent I/O memory barriers can be used and this could bring
|
||||
* performance gain depending on architectures.
|
||||
*/
|
||||
///@{
|
||||
/**
|
||||
* Write memory barrier for coherent memory between lcore and I/O device
|
||||
*
|
||||
* Guarantees that the STORE operations on coherent memory that
|
||||
* precede the rte_cio_wmb() call are visible to I/O device before the
|
||||
* STORE operations that follow it.
|
||||
*/
|
||||
static inline void rte_cio_wmb(void);
|
||||
|
||||
/**
|
||||
* Read memory barrier for coherent memory between lcore and I/O device
|
||||
*
|
||||
* Guarantees that the LOAD operations on coherent memory updated by
|
||||
* I/O device that precede the rte_cio_rmb() call are visible to CPU
|
||||
* before the LOAD operations that follow it.
|
||||
*/
|
||||
static inline void rte_cio_rmb(void);
|
||||
///@}
|
||||
|
||||
#endif /* __DOXYGEN__ */
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user