From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <thomas@monjalon.net>
Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com
 [66.111.4.25]) by dpdk.org (Postfix) with ESMTP id E8F481BB8F
 for <dev@dpdk.org>; Fri, 11 May 2018 01:58:44 +0200 (CEST)
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41])
 by mailout.nyi.internal (Postfix) with ESMTP id 705EE20DD3;
 Thu, 10 May 2018 19:58:44 -0400 (EDT)
Received: from mailfrontend1 ([10.202.2.162])
 by compute1.internal (MEProxy); Thu, 10 May 2018 19:58:44 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h=
 cc:date:from:in-reply-to:message-id:references:subject:to
 :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=1zUMTI5XykEAEa
 HhJHg3NpJbhPPKHFOOUhYTZyYnalA=; b=nKWzjTvfWxkQZGF7P1r3kOpYxVrajK
 PkRhdKKri+LsLF+7zlhuNvQf8RNS0sQj0md+sb8WjovHzFPncCLfEMhHTmeJ4H9x
 +hlxi0pPbCLUHLU1LZQrXyZ7xTKEjiYnxqSTyYc5GGxM0GksThg78KDp6JaXeLxF
 gUw99DAcJoZ+I=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:date:from:in-reply-to:message-id
 :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s=
 fm2; bh=1zUMTI5XykEAEaHhJHg3NpJbhPPKHFOOUhYTZyYnalA=; b=jZKmPmjI
 JnKdahksjGVqNOXiTl5D8lW6vgHcHuDl44W4V/s+Co3fk6Na9LxwcLMflWc4jpR4
 6KILTwn9GQmDr+R92WqbXn4EvUb/hIAWBC8NjVan2RXIPaplYPeXu+RYgv0WutJp
 yb+VRmXCfvSY5YsghopM68At82WxuTw4fop6WhSviw7Q1MXJgUglVVzZsgcT/Ktc
 EZpE7wG65ZHK8SxGxt8w7syorUToUffVtF796t7VnAykowb2PJcp5kQK3wB+qs5C
 HsXyZMaR2g9segtHjwqFa4yrJOkTtvChXZiTjrMEGuajZAoadfvayn10y2tRwJxO
 fyVmo1x1v0m0DA==
X-ME-Sender: <xms:tNz0WukzMBQPJxLuWwk7zdqjyhKaPVSWjTBAX_QxLwUF4OkdhuqN0w>
Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184])
 by mail.messagingengine.com (Postfix) with ESMTPA id 6AAB3E4488;
 Thu, 10 May 2018 19:58:43 -0400 (EDT)
From: Thomas Monjalon <thomas@monjalon.net>
To: dev@dpdk.org
Cc: matan@mellanox.com, arybchenko@solarflare.com, stephen@networkplumber.org,
 ferruh.yigit@intel.com
Date: Fri, 11 May 2018 01:58:25 +0200
Message-Id: <20180510235836.1099-1-thomas@monjalon.net>
X-Mailer: git-send-email 2.16.2
In-Reply-To: <20180509094337.26112-1-thomas@monjalon.net>
References: <20180509094337.26112-1-thomas@monjalon.net>
Subject: [dpdk-dev] [PATCH v3 00/11] ethdev: fix race conditions in iterator
	and notifications
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Thu, 10 May 2018 23:58:45 -0000

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.

v3:
* address Andrew comments on failsafe patch 10
* address Stephen comment about moving check in a function (is_allocated)
* rename rte_eth_dev_allocated_nolock to _rte_eth_dev_allocated

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?
Gaetan, Andrew and Stephen have replied positively.


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           | 22 +++++++-
 drivers/net/failsafe/failsafe_eal.c       | 57 ++++++++++++-------
 drivers/net/failsafe/failsafe_ether.c     | 23 ++++++++
 drivers/net/failsafe/failsafe_private.h   |  3 +
 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            | 94 +++++++++++++++++++++----------
 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, 233 insertions(+), 96 deletions(-)

-- 
2.16.2