[dpdk-dev] [PATCH v2 00/11] ethdev: fix race conditions in iterator and notifications

Thomas Monjalon thomas at monjalon.net
Thu May 10 00:43:02 CEST 2018


We have discovered some race conditions when using the port iterator
and/or the notifications recently added.
The work was done mostly with failsafe but some bugs could
be reproduced with other drivers.
These 11 patches are fixing all these issues.
The PMDs are modified to call a new function after probing each port.

v2 (address Gaetan comments):
* rename rte_eth_dev_allocated_lock_free to rte_eth_dev_allocated_nolock
* do not use uint32_t for avoiding port id iteration overflow
  (should be fixed separately with BUILD_BUG_ON)


Quick survey:
Do you think it is too late to merge these fixes in 18.05?
Or do you agree that these bugs really deserve to be fixed
by this series in 18.05-rc3?


Matan Azrad (4):
  ethdev: allow ownership operations on unused port
  ethdev: add lock to port allocation check
  net/failsafe: fix sub-device ownership race
  ethdev: fix port removal notification timing

Thomas Monjalon (7):
  ethdev: fix debug log of owner id
  net/failsafe: fix sub-device visibility
  ethdev: add doxygen comments for each state
  drivers/net: use higher level of probing helper for PCI
  ethdev: add probing finish function
  ethdev: fix port visibility before initialization
  ethdev: fix port probing notification

 drivers/net/af_packet/rte_eth_af_packet.c |  2 +
 drivers/net/ark/ark_ethdev.c              |  2 +
 drivers/net/avp/avp_ethdev.c              | 15 +-----
 drivers/net/bnx2x/bnx2x_ethdev.c          | 20 ++-----
 drivers/net/bonding/rte_eth_bond_pmd.c    |  2 +
 drivers/net/cxgbe/cxgbe_ethdev.c          |  1 +
 drivers/net/cxgbe/cxgbe_main.c            |  5 ++
 drivers/net/cxgbe/cxgbevf_ethdev.c        |  1 +
 drivers/net/cxgbe/cxgbevf_main.c          |  5 ++
 drivers/net/dpaa/dpaa_ethdev.c            |  5 +-
 drivers/net/dpaa2/dpaa2_ethdev.c          |  4 +-
 drivers/net/failsafe/failsafe.c           | 24 +++++++--
 drivers/net/failsafe/failsafe_eal.c       | 57 +++++++++++++-------
 drivers/net/failsafe/failsafe_ether.c     | 23 ++++++++
 drivers/net/failsafe/failsafe_private.h   |  4 ++
 drivers/net/kni/rte_eth_kni.c             |  2 +
 drivers/net/liquidio/lio_ethdev.c         | 15 +-----
 drivers/net/mlx4/mlx4.c                   |  1 +
 drivers/net/mlx5/mlx5.c                   |  2 +
 drivers/net/mvpp2/mrvl_ethdev.c           |  1 +
 drivers/net/nfp/nfp_net.c                 |  2 +
 drivers/net/null/rte_eth_null.c           |  2 +
 drivers/net/octeontx/octeontx_ethdev.c    |  3 ++
 drivers/net/pcap/rte_eth_pcap.c           |  2 +
 drivers/net/ring/rte_eth_ring.c           |  1 +
 drivers/net/softnic/rte_eth_softnic.c     |  3 ++
 drivers/net/szedata2/rte_eth_szedata2.c   |  2 +
 drivers/net/tap/rte_eth_tap.c             |  2 +
 drivers/net/vhost/rte_eth_vhost.c         |  2 +
 drivers/net/virtio/virtio_user_ethdev.c   |  3 ++
 lib/librte_ethdev/rte_ethdev.c            | 87 ++++++++++++++++++++-----------
 lib/librte_ethdev/rte_ethdev.h            |  6 ++-
 lib/librte_ethdev/rte_ethdev_driver.h     | 14 +++++
 lib/librte_ethdev/rte_ethdev_pci.h        |  2 +
 lib/librte_ethdev/rte_ethdev_version.map  |  1 +
 test/test/virtual_pmd.c                   |  2 +
 36 files changed, 228 insertions(+), 97 deletions(-)

-- 
2.16.2



More information about the dev mailing list