v2..v3: 1) Changed I40E_PCI_REG_WRITE to I40E_PCI_REG_WRITE_RELAXED in fastpath i40e_rx_alloc_bufs function(Tiwei) 2) Changed rte_?wb to rte_*wb in the git commit log of "eal/arm64: change barrier definitions to macros"(Jianbo) 3) Re-based to latest dpdk master(Jan 12)
v1..v2: 1) Changed rte_[read/write]b/w/l/q_[relaxed] to rte_[read/write]8/16/32/64_[relaxed](Yuanhan) 2) Changed rte_?mb to macros for arm64(Jianbo) 3) rte_wmb() followed by rte_write* changed to rte_wmb() followed by relaxed version(rte_write_relaxed) in _fast_ path to avoid an extra memory barrier for arm64 in fast path(Jianbo) 3) Replaced virtio io_read*/io_write* with rte_read*/rte_write*(Yuanhan) Based on the discussion in the below-mentioned thread, http://dev.dpdk.narkive.com/DpIRqDuy/dpdk-dev-patch-v2-i40e-fix-eth-i40e-dev-init-sequence-on-thunderx This patchset introduces 8-bit, 16-bit, 32bit, 64bit I/O device memory read/write operations along with the relaxed versions. The weakly-ordered machine like ARM needs additional I/O barrier for device memory read/write access over PCI bus. By introducing the EAL abstraction for I/O device memory read/write access, The drivers can access I/O device memory in architecture-agnostic manner. The relaxed version does not have additional I/O memory barrier, useful in accessing the device registers of integrated controllers which implicitly strongly ordered with respect to memory access. This patch-set split into three functional set: patch-set 1-9: Introduce I/O device memory barrier eal abstraction and implement it for all the architectures. patch-set 10-13: Introduce I/O device memory read/write operations Earl abstraction and implement it for all the architectures using previous I/O device memory barrier. patchset 14-28: Replace the raw readl/writel in the drivers with new rte_read[8/16/32/64], rte_write[8/16/32/64] eal abstraction Note: 1) We couldn't test the patch on all the Hardwares due to unavailability. Appreciate the feedback from ARCH and PMD maintainers. 2) patch 13/28 has false positive check patch error with ASM syntax ERROR:BRACKET_SPACE: space prohibited before open square bracket '[' #92: FILE: lib/librte_eal/common/include/arch/arm/rte_io_64.h:54: + : [val] "=r" (val) Jerin Jacob (15): eal: introduce I/O device memory barriers eal/x86: define I/O device memory barriers for IA eal/tile: define I/O device memory barriers for tile eal/ppc64: define I/O device memory barriers for ppc64 eal/arm: separate smp barrier definition for ARMv7 and ARMv8 eal/armv7: define I/O device memory barriers for ARMv7 eal/arm64: fix memory barrier definition for arm64 eal/arm64: define smp barrier definition for arm64 eal/arm64: define I/O device memory barriers for arm64 eal: introduce I/O device memory read/write operations eal: generic implementation for I/O device read/write access eal: let all architectures use generic I/O implementation eal/arm64: override I/O device read/write access for arm64 eal/arm64: change barrier definitions to macros net/thunderx: use eal I/O device memory read/write API Santosh Shukla (14): crypto/qat: use eal I/O device memory read/write API net/bnxt: use eal I/O device memory read/write API net/bnx2x: use eal I/O device memory read/write API net/cxgbe: use eal I/O device memory read/write API net/e1000: use eal I/O device memory read/write API net/ena: use eal I/O device memory read/write API net/enic: use eal I/O device memory read/write API net/fm10k: use eal I/O device memory read/write API net/i40e: use eal I/O device memory read/write API net/ixgbe: use eal I/O device memory read/write API net/nfp: use eal I/O device memory read/write API net/qede: use eal I/O device memory read/write API net/virtio: use eal I/O device memory read/write API net/vmxnet3: use eal I/O device memory read/write API doc/api/doxy-api-index.md | 3 +- .../qat/qat_adf/adf_transport_access_macros.h | 11 +- drivers/net/bnx2x/bnx2x.h | 26 +- drivers/net/bnxt/bnxt_cpr.h | 13 +- drivers/net/bnxt/bnxt_hwrm.c | 7 +- drivers/net/bnxt/bnxt_txr.h | 6 +- drivers/net/cxgbe/base/adapter.h | 34 ++- drivers/net/cxgbe/cxgbe_compat.h | 8 +- drivers/net/cxgbe/sge.c | 10 +- drivers/net/e1000/base/e1000_osdep.h | 18 +- drivers/net/e1000/em_rxtx.c | 2 +- drivers/net/e1000/igb_rxtx.c | 2 +- drivers/net/ena/base/ena_eth_com.h | 2 +- drivers/net/ena/base/ena_plat_dpdk.h | 11 +- drivers/net/enic/enic_compat.h | 27 +- drivers/net/enic/enic_rxtx.c | 9 +- drivers/net/fm10k/base/fm10k_osdep.h | 17 +- drivers/net/i40e/base/i40e_osdep.h | 10 +- drivers/net/i40e/i40e_rxtx.c | 6 +- drivers/net/ixgbe/base/ixgbe_osdep.h | 11 +- drivers/net/ixgbe/ixgbe_rxtx.c | 13 +- drivers/net/nfp/nfp_net_pmd.h | 9 +- drivers/net/qede/base/bcm_osal.h | 20 +- drivers/net/qede/base/ecore_int_api.h | 28 +- drivers/net/qede/base/ecore_spq.c | 3 +- drivers/net/qede/qede_rxtx.c | 2 +- drivers/net/thunderx/base/nicvf_plat.h | 36 +-- drivers/net/virtio/virtio_pci.c | 97 ++----- drivers/net/vmxnet3/vmxnet3_ethdev.h | 8 +- lib/librte_eal/common/Makefile | 3 +- .../common/include/arch/arm/rte_atomic.h | 6 - .../common/include/arch/arm/rte_atomic_32.h | 12 + .../common/include/arch/arm/rte_atomic_64.h | 57 ++-- lib/librte_eal/common/include/arch/arm/rte_io.h | 51 ++++ lib/librte_eal/common/include/arch/arm/rte_io_64.h | 159 +++++++++++ .../common/include/arch/ppc_64/rte_atomic.h | 6 + lib/librte_eal/common/include/arch/ppc_64/rte_io.h | 47 +++ .../common/include/arch/tile/rte_atomic.h | 6 + lib/librte_eal/common/include/arch/tile/rte_io.h | 47 +++ .../common/include/arch/x86/rte_atomic.h | 6 + lib/librte_eal/common/include/arch/x86/rte_io.h | 47 +++ lib/librte_eal/common/include/generic/rte_atomic.h | 27 ++ lib/librte_eal/common/include/generic/rte_io.h | 317 +++++++++++++++++++++ 43 files changed, 981 insertions(+), 259 deletions(-) create mode 100644 lib/librte_eal/common/include/arch/arm/rte_io.h create mode 100644 lib/librte_eal/common/include/arch/arm/rte_io_64.h create mode 100644 lib/librte_eal/common/include/arch/ppc_64/rte_io.h create mode 100644 lib/librte_eal/common/include/arch/tile/rte_io.h create mode 100644 lib/librte_eal/common/include/arch/x86/rte_io.h create mode 100644 lib/librte_eal/common/include/generic/rte_io.h -- 2.5.5