From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <thomas@monjalon.net>
Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com
 [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 162E6AAA9
 for <stable@dpdk.org>; Wed,  9 May 2018 11:31:20 +0200 (CEST)
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41])
 by mailout.nyi.internal (Postfix) with ESMTP id B887720DE3;
 Wed,  9 May 2018 05:31:19 -0400 (EDT)
Received: from mailfrontend1 ([10.202.2.162])
 by compute1.internal (MEProxy); Wed, 09 May 2018 05:31:19 -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=ZnI9ZTOXZpUy5t
 9RQ+JmG8OdP7Xq76vIHLu6sbZILPY=; b=DwWcPblv8oc4mbsSyyHkEfb2ruKa4m
 FX72HVUfk/3dhJHDT+iU0kr55AjY8Xnp8AByPoHMuU+Zw9hSIfvb2L+WdlNQ0DgD
 hCJzNOoi+CovkjjJgBoUGn4+EAnbMKsq242gY7EbqHUBL7q26vexo72RBat03Rit
 V3Tld9B4Qracw=
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=ZnI9ZTOXZpUy5t9RQ+JmG8OdP7Xq76vIHLu6sbZILPY=; b=fYyB1pCh
 kWL8vXxoMNGTnufV+9qJOYn3Td2qA+hmDtjFLtX9u4PBJRxDxJ/WkM2QRFARII1V
 oazy1f1waL+y6I/TcqkFA0Dr7xHSonVOxWP59HaffHuimuX6s5wweeKZCoqbE6Mk
 hrsynVTa6+HytWXYBndAF/US9G+bhJIl3+1SBx54+veTz6ucrhUYBa8sI8xk+0n0
 lGfl6ripAMMl2zteElgcLKxj4bOgHNWtCCWcDFOmdhcldaz0ohRzcw4s1fngstsU
 2TTDVmYaHJvOE7Xiq0CGOa0SfLgsbIf4zBLlBsVO63/0EH1krJmtHnXjAfQjQGkb
 3k8H0tVmRHfN3g==
X-ME-Sender: <xms:57_yWqcRNcFMX0D6qq6yNbZ0TG3wa_ZOul4mzxXEVF_az3ViE3jYjg>
Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184])
 by mail.messagingengine.com (Postfix) with ESMTPA id C5755E4120;
 Wed,  9 May 2018 05:31:18 -0400 (EDT)
From: Thomas Monjalon <thomas@monjalon.net>
To: matan@mellanox.com
Cc: stable@dpdk.org
Date: Wed,  9 May 2018 11:31:03 +0200
Message-Id: <20180509093105.25984-10-thomas@monjalon.net>
X-Mailer: git-send-email 2.16.2
In-Reply-To: <20180509093105.25984-1-thomas@monjalon.net>
References: <20180509093105.25984-1-thomas@monjalon.net>
Subject: [dpdk-stable] [PATCH 09/11] ethdev: fix port probing notification
X-BeenThere: stable@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches for DPDK stable branches <stable.dpdk.org>
List-Unsubscribe: <https://dpdk.org/ml/options/stable>,
 <mailto:stable-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/stable/>
List-Post: <mailto:stable@dpdk.org>
List-Help: <mailto:stable-request@dpdk.org?subject=help>
List-Subscribe: <https://dpdk.org/ml/listinfo/stable>,
 <mailto:stable-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Wed, 09 May 2018 09:31:20 -0000

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 <thomas@monjalon.net>
---
 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 91cd0db11..e1209bb2a 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