[dpdk-dev] How to replace rte_eth_dev_attach with rte_eal_hotplug_add

Thomas Monjalon thomas at monjalon.net
Thu Sep 27 10:58:47 CEST 2018


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.




More information about the dev mailing list