ethdev: fix PCI device release in secondary process
In secondary process, rte_eth_dev_close() doesn't clear eth_dev->data. If calling rte_dev_remove() after rte_eth_dev_close(), in rte_eth_dev_pci_generic_remove() function, the released eth device still can be found by its name in shared memory. As a result, the eth device will be released repeatedly. The state of the eth device is modified to RTE_ETH_DEV_UNUSED after rte_eth_dev_close(). So this state can be used to avoid this problem. Fixes: dcd5c8112bc3 ("ethdev: add PCI driver helpers") Cc: stable@dpdk.org Signed-off-by: Huisong Li <lihuisong@huawei.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
00ea15e7a3
commit
17faaed854
@ -151,6 +151,16 @@ rte_eth_dev_pci_generic_remove(struct rte_pci_device *pci_dev,
|
||||
if (!eth_dev)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* In secondary process, a released eth device can be found by its name
|
||||
* in shared memory.
|
||||
* If the state of the eth device is RTE_ETH_DEV_UNUSED, it means the
|
||||
* eth device has been released.
|
||||
*/
|
||||
if (rte_eal_process_type() == RTE_PROC_SECONDARY &&
|
||||
eth_dev->state == RTE_ETH_DEV_UNUSED)
|
||||
return 0;
|
||||
|
||||
if (dev_uninit) {
|
||||
ret = dev_uninit(eth_dev);
|
||||
if (ret)
|
||||
|
Loading…
x
Reference in New Issue
Block a user