From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: [PATCH v2 09/11] ethdev: fix port probing notification Date: Thu, 10 May 2018 00:43:11 +0200 Message-ID: <20180509224313.27289-10-thomas@monjalon.net> References: <20180509094337.26112-1-thomas@monjalon.net> <20180509224313.27289-1-thomas@monjalon.net> To: dev@dpdk.org Return-path: Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by dpdk.org (Postfix) with ESMTP id 379861B795 for ; Thu, 10 May 2018 00:43:29 +0200 (CEST) Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 4E037E4B94 for ; Wed, 9 May 2018 18:43:27 -0400 (EDT) In-Reply-To: <20180509224313.27289-1-thomas@monjalon.net> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The new device was notified as soon as it was allocated. It leads to use a device which is not yet initialized. The notification must be published after the initialization is done by the PMD, but before the state is changed, in order to let notified entities taking ownership before general availability. Fixes: 29aa41e36de7 ("ethdev: add notifications for probing and removal") Cc: stable@dpdk.org Signed-off-by: Thomas Monjalon --- lib/librte_ethdev/rte_ethdev.c | 5 ++--- lib/librte_ethdev/rte_ethdev_driver.h | 2 ++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index c5d9c7fe4..023e31d88 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -315,9 +315,6 @@ rte_eth_dev_allocate(const char *name) unlock: rte_spinlock_unlock(&rte_eth_dev_shared_data->ownership_lock); - if (eth_dev != NULL) - _rte_eth_dev_callback_process(eth_dev, RTE_ETH_EVENT_NEW, NULL); - return eth_dev; } @@ -3386,6 +3383,8 @@ rte_eth_dev_probing_finish(struct rte_eth_dev *dev) if (dev == NULL) return; + _rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_NEW, NULL); + dev->state = RTE_ETH_DEV_ATTACHED; } diff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h index 3640dff68..c9c825e3f 100644 --- a/lib/librte_ethdev/rte_ethdev_driver.h +++ b/lib/librte_ethdev/rte_ethdev_driver.h @@ -106,6 +106,8 @@ int _rte_eth_dev_callback_process(struct rte_eth_dev *dev, * This is the last step of device probing. * It must be called after a port is allocated and initialized successfully. * + * The notification RTE_ETH_EVENT_NEW is sent to other entities + * (libraries and applications). * The state is set as RTE_ETH_DEV_ATTACHED. * * @param dev -- 2.16.2