From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: How to replace rte_eth_dev_attach with rte_eal_hotplug_add Date: Thu, 27 Sep 2018 10:58:47 +0200 Message-ID: <1671413.72NatgAg1l@xps> References: <201809210720.w8L7JtuZ016319@ccmail04.silk.ntt-tx.co.jp> <2330393.uxWCJWc828@xps> <201809270138.w8R1cJHm000890@ccmail04.silk.ntt-tx.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit Cc: dev@dpdk.org, Gaetan Rivet To: Hideyuki Yamashita Return-path: Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by dpdk.org (Postfix) with ESMTP id 29DE61B111 for ; Thu, 27 Sep 2018 10:58:50 +0200 (CEST) In-Reply-To: <201809270138.w8R1cJHm000890@ccmail04.silk.ntt-tx.co.jp> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 27/09/2018 03:38, Hideyuki Yamashita: > Dear Thomas, > > Thanks for your answer. > It took me a little time to digest answer. > Please see inline. > > > > 21/09/2018 09:19, Hideyuki Yamashita: > > > Dear Gaetan and Thomas, > > > > > > Thanks for your answer. > > > Please see inline. > > > > > > > 20/09/2018 11:09, Ga?an Rivet: > > > > > On Thu, Sep 20, 2018 at 05:46:37PM +0900, Hideyuki Yamashita wrote: > > > > > > Hello, > > > > > > > > > > > > From dpdk 18.08 release rte_eth_dev_attach and > > > > > > rte_eth_dev_detach becom deprecated API and > > > > > > it is recommended to replace with rte_eal_hotplug_add > > > > > > and rte_eal_hotplug_remove. > > > > > > > > > > > > My program uses above mentioned deprecated APIs > > > > > > and have to replace those. > > > > > > Note that my program uses attach to attach vhost, pcap pmd. > > > > > > > > > > > > My question is whether it is correct to replace those as following: > > > > > > find rte_eth_dev_attach function in rte_ethdev.c and > > > > > > migrate those content into my program. > > > > > > > > > > > > e.g. > > > > > > lib/librte_ethdev/rte_ethdev.c line 643-686 for attach > > > > > > lib/librte_ethdev/rte_ethdev.c line 690-720 for detach > > > > > > > > > > > > Your advice/guidance are much appreciated. > > > > > > Thanks! > > > > > > > > > > Hello Hideyuki, > > > > > > > > > > You could use this code for guidance, while leaving the ethdev > > > > > specificities such as verifying the eth_dev_count_total(). The hotplug > > > > > function would already return an error if the PMD was not able to create > > > > > the necessary devices. > > > > > > > > > > The main issue might be to find the port_id of your new port. > > > > > You won't be able to use eth_dev_last_created_port, so you would have to > > > > > iterate over the ethdev using RTE_ETH_FOREACH_DEV and find the one > > > > > matching your parameters (you might for example match the rte_device > > > > > name with the name you used in hotplug_add, as there is no standard > > > > > naming scheme at the ethdev level). > > > First of all, thank for your answering to my question. > > > But I have questions. > > > (Sorry, I have poor knowledge about dpdk and have many basic questions) > > > > > > Q1. > > > Why eth_dev_last_created_port can not be used? > > > When I look into rte_eth_dev_atthach in 18.08, it calls > > > > > > *port_id = eth_dev_last_created_port; > > > > > > at the end of the function. > > > > You can have a race condition. > Please elaborate me a bit more. > > Is it correct understanding that race condition > includes > - read information before port is available > - other device may be plugged (or unplugged) > and so using "eth_dev_last_created_port" is > NOT reliable? I am thinking about the second one only. > > > Q2. > > > Is it possible to use rte_eth_dev_get_port_by name > > > instead of calling RTE_ETH_FOREACH_DEV or using > > > eth_dev_last_created_port? > > > > This function works only if you know the ethdev name generated by the PMD. > Thanks > > > > Q3. > > > If answer to Q2 is no, then how can I get device name from each device? > > > For example, rte_eth_dev_info_get takes port_id as its > > > argument.But what I want to know is the port id of the specified device > > > name. > > > > If you want the ethdev port ids created after probing (based on devargs), > > you probably want to request it with the same devargs. > > I will try to work on something for this need. > > For now, the most reliable solution is to use the notifications. > > I think I have two alternatives: > Alt1: > call "rte_eal_hotplug_add" > and retrieve port_id for newly plugged device > using RTE_ETH_FOREACH_DEV. > (as Gaetan said) > > Alt2: > call "rte_eth_dev_callback_register" to subscribe "port probe" event > and "rte_eal_hotplug_add" > and finally get notification including port id. > (As you said) > > My question is which is better alternative? > Are there any bad point on Alt1 like using > eth_dev_last_created_port? > (e.g. port not available when called RTE_ETH_FOREACH_DEV) I think both are OK.