Re: [dpdk-dev] [PATCH V3] ethdev: fix eth device released repeatedly
From: "lihuisong (C)" <lihuisong@huawei.com>
Date: 2021-10-21 02:31:59
在 2021/10/19 21:09, Ferruh Yigit 写道:
On 10/15/2021 4:44 AM, Huisong Li wrote:quoted
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.Hi Huisong, Can you please add Fixes line, and stable tag if the change is requested for backport?
ok. It has been added. Please review v4.
quoted
Signed-off-by: Huisong Li <lihuisong@huawei.com> --- v2 -> v3: * fix the commit log description and the comment inside the code. v1 -> v2: * fix the commit log description. RFC -> v1: * fix commit log and add a judgment for secondary process. --- lib/ethdev/ethdev_pci.h | 10 ++++++++++ 1 file changed, 10 insertions(+)diff --git a/lib/ethdev/ethdev_pci.h b/lib/ethdev/ethdev_pci.h index 8edca82ce8..fcabae02fa 100644 --- a/lib/ethdev/ethdev_pci.h +++ b/lib/ethdev/ethdev_pci.h@@ -151,6 +151,16 @@ rte_eth_dev_pci_generic_remove(structrte_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).