This patch series completes the removal of rte_smp_XX barrier
functions that was announced over five years ago (20.05).

In the process several cases of race conditions were found
and fixed. See patches 3, 4, and 17. These are marked with Fixes:
tags and Cc: stable.

Most of this is mechanical with AI assistance, so strongly
encourage maintainers to take a good look.

Functional and build run on x86 and ARM native.
Should have no functional change, but as previous cleanups of
atomic have shown performance might be impacted by compiler bugs.

The lock-free stack patch measured faster than the generic version
it replaces, up to 63% on a 32-core x86 box; the numbers are in
that patch's commit message.

The RFC removed the barrier test outright.
Konstantin pointed out it still covers the custom x86 seq_cst fence,
so patch 19 now keeps the Peterson lock test and rewrites it around
rte_atomic_thread_fence(rte_memory_order_seq_cst) instead.
Need some careful patch series ordering to keep this all bisect
clean.


v2 - address review feedback 

Stephen Hemminger (33):
  bpf: replace deprecated SMP barriers with C11 fences
  bus/vmbus: remove packed attribute from ring buffer
  bus/vmbus: fix ring buffer ordering on weakly ordered CPUs
  bus/vmbus: fix missing acquire on receive ring index
  bus/vmbus: replace SMP barriers with C11 memory fences
  drivers/baseband: convert rte_smp_rmb to fence
  net/hinic: replace rte_smp_rmb
  net/intel: replace rte_smp_rmb
  net/virtio: replace rte_smp_rmb
  net/thunderx: replace rte_smp_rmb
  stack: always use C11 memory model implementation
  ring: replace SMP read barrier with C11 acquire fence
  crypto/virtio: update comment reference to rte_smp_rmb
  crypto/caam_jr: replace rte_smp_rmb
  crypto/caam_jr: use IO barrier before job ring doorbell
  crypto/octeontx: use IO barrier before doorbell
  event/sw: fix unlinks in progress counter races
  event/sw: replace SMP barriers with C11 atomics
  test/barrier: test sequentially consistent fence only
  eal/x86: move optimized fence out of SMP barrier
  common/octeontx: remove redundant barrier in mbox
  mempool/octeontx: use IO barrier in pool destroy
  event/octeontx: replace deprecated SMP barriers
  event/dpaa2: replace deprecated barrier in selftest
  event/dsw: replace SMP barriers with release fences
  event/opdl: replace SMP barriers with C11 atomics
  net/netvsc: replace SMP barrier in RNDIS response
  net/thunderx: replace deprecated SMP barriers
  net/virtio: replace deprecated barrier in avail index update
  eal: remove stale SMP barrier in rte_service
  eal: remove rte_smp_XX
  checkpatches: no longer warn about rte_smp_XX
  doc: update release notes about rte_smp_XX removal

 app/test/test_barrier.c                       | 105 ++++--------
 devtools/checkpatches.sh                      |   8 -
 doc/guides/rel_notes/deprecation.rst          |   8 -
 doc/guides/rel_notes/release_26_11.rst        |  11 ++
 .../fpga_5gnr_fec/rte_fpga_5gnr_fec.c         |   8 +-
 drivers/baseband/fpga_lte_fec/fpga_lte_fec.c  |  12 +-
 drivers/bus/vmbus/private.h                   |  12 +-
 drivers/bus/vmbus/rte_vmbus_reg.h             |   4 +-
 drivers/bus/vmbus/vmbus_bufring.c             |  17 +-
 drivers/bus/vmbus/vmbus_channel.c             |  10 +-
 drivers/common/octeontx/octeontx_mbox.c       |   6 +-
 drivers/crypto/caam_jr/caam_jr.c              |   5 +-
 .../crypto/octeontx/otx_cryptodev_hw_access.h |   4 +-
 drivers/crypto/virtio/virtqueue.h             |   2 +-
 drivers/event/dpaa2/dpaa2_eventdev_selftest.c |   4 +-
 drivers/event/dsw/dsw_event.c                 |   8 +-
 drivers/event/octeontx/ssovf_evdev_selftest.c |   6 +-
 drivers/event/octeontx/ssovf_worker.c         |   8 +-
 drivers/event/opdl/opdl_evdev.c               |   7 +-
 drivers/event/sw/sw_evdev.c                   |  37 +++--
 drivers/event/sw/sw_evdev.h                   |   2 +-
 drivers/event/sw/sw_evdev_scheduler.c         |  17 +-
 drivers/mempool/octeontx/octeontx_fpavf.c     |   4 +-
 drivers/net/hinic/base/hinic_pmd_cmdq.c       |   3 +-
 drivers/net/hinic/base/hinic_pmd_mgmt.c       |   2 +-
 drivers/net/intel/ice/ice_rxtx.c              |   2 +-
 drivers/net/intel/ixgbe/ixgbe_rxtx.c          |   2 +-
 drivers/net/netvsc/hn_rndis.c                 |   2 +-
 drivers/net/thunderx/base/nicvf_hw.c          |   3 +-
 drivers/net/thunderx/base/nicvf_plat.h        |   5 +-
 drivers/net/virtio/virtqueue.h                |  18 +--
 lib/bpf/bpf_pkt.c                             |  25 ++-
 lib/eal/arm/include/rte_atomic_32.h           |   6 -
 lib/eal/arm/include/rte_atomic_64.h           |   6 -
 lib/eal/common/rte_service.c                  |   1 -
 lib/eal/include/generic/rte_atomic.h          |  61 -------
 lib/eal/loongarch/include/rte_atomic.h        |   6 -
 lib/eal/ppc/include/rte_atomic.h              |   6 -
 lib/eal/riscv/include/rte_atomic.h            |   6 -
 lib/eal/x86/include/rte_atomic.h              |  41 ++---
 lib/ring/rte_ring_gcc_pvt.h                   |   6 +-
 lib/stack/meson.build                         |   1 -
 lib/stack/rte_stack_lf.h                      |   4 -
 lib/stack/rte_stack_lf_generic.h              | 153 ------------------
 44 files changed, 208 insertions(+), 456 deletions(-)
 delete mode 100644 lib/stack/rte_stack_lf_generic.h

-- 
2.53.0

Reply via email to