[dpdk-dev] [PATCH v11 01/19] ethdev: add function to release port in local process

Andrew Rybchenko arybchenko at solarflare.com
Wed Jul 11 18:05:16 CEST 2018


On 11.07.2018 15:30, Zhang, Qi Z wrote:
>
>> -----Original Message-----
>> From: Andrew Rybchenko [mailto:arybchenko at solarflare.com]
>> Sent: Wednesday, July 11, 2018 5:27 PM
>> To: Zhang, Qi Z <qi.z.zhang at intel.com>; thomas at monjalon.net; Burakov,
>> Anatoly <anatoly.burakov at intel.com>
>> Cc: Ananyev, Konstantin <konstantin.ananyev at intel.com>; dev at dpdk.org;
>> Richardson, Bruce <bruce.richardson at intel.com>; Yigit, Ferruh
>> <ferruh.yigit at intel.com>; Shelton, Benjamin H
>> <benjamin.h.shelton at intel.com>; Vangati, Narender
>> <narender.vangati at intel.com>
>> Subject: Re: [dpdk-dev] [PATCH v11 01/19] ethdev: add function to release port
>> in local process
>>
>> On 11.07.2018 06:08, Qi Zhang wrote:
>>> Add driver API rte_eth_release_port_private to support the case when
>>> an ethdev need to be detached on a secondary process.
>>> Local state is set to unused and shared data will not be reset so the
>>> primary process can still use it.
>>>
>>> Signed-off-by: Qi Zhang <qi.z.zhang at intel.com>
>>> Reviewed-by: Andrew Rybchenko <arybchenko at solarflare.com>
>>> Acked-by: Remy Horton <remy.horton at intel.com>
>>> ---
> <...>
>>> +	/**
>>> +	 * PCI device can only be globally detached directly by a
>>> +	 * primary process. In secondary process, we only need to
>>> +	 * release port.
>>> +	 */
>>> +	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
>>> +		return rte_eth_dev_release_port_private(eth_dev);
>> I've realized that some uninit functions which will not be called anymore in
>> secondary processes have check for process type and handling of secondary
>> process case. It makes code inconsistent and should be fixed.
> Good point, I did a scan and check all the places that rte_eth_dev_pci_generic_remove be involved.
> I found only sfc driver (sfc_eth_dev_unit) will call some cleanup on secondary process as below.

The patch makes impossible dev_uninit to be executed for secondary process
for all cases if rte_eth_dev_pci_generic_remove() is used. However, many 
drivers
still check for process type. Yes, sfc does cleanup, but some drivers 
return -EPERM,
some return 0. In fact it does not matter. It leaves dead code which is 
really confusing.

>
> 		if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
>                  sfc_eth_dev_secondary_clear_ops(dev);
>                  return 0;
>          }
>
> But in sfc_eth_dev_secondary_clear_ops
>
> static void
> sfc_eth_dev_secondary_clear_ops(struct rte_eth_dev *dev)
> {
>          dev->dev_ops = NULL;
>          dev->tx_pkt_burst = NULL;
>          dev->rx_pkt_burst = NULL;
> }
>
> So my understand is current change is not a problem for all exist drivers.
>
> Please let me know if I missed something
>
> Thanks
> Qi
>
>>> +
>>>    	if (dev_uninit) {
>>>    		ret = dev_uninit(eth_dev);
>>>    		if (ret)



More information about the dev mailing list