[dpdk-dev] [PATCH v3 00/29] introduce I/O device memory read/write operations

Jerin Jacob jerin.jacob at caviumnetworks.com
Thu Jan 12 10:16:57 CET 2017


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



More information about the dev mailing list