From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ferruh Yigit Subject: Re: [dpdk-stable] [PATCH 09/11] ethdev: fix port probing notification Date: Wed, 9 May 2018 19:07:09 +0100 Message-ID: <050d4b36-a6d5-5044-3462-e751642ea1ff@intel.com> References: <20180509094337.26112-1-thomas@monjalon.net> <20180509094337.26112-10-thomas@monjalon.net> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: stable@dpdk.org To: Thomas Monjalon , dev@dpdk.org Return-path: In-Reply-To: <20180509094337.26112-10-thomas@monjalon.net> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 5/9/2018 10:43 AM, Thomas Monjalon wrote: > 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 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); > + Technically we can have as many ethdev created as we want in probe() right? Doesn't have to be a one to one mapping there, having user event in rte_eth_dev_allocate() guaranties each ethdev created sends the event. But when you moved this into probe() now one event sent for event, same comment for previous one, I don't think it is good idea to tie ethdev allocation with probe() > 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 >