The device state should be handled by the ether layer when possible. Applications should not have to do it.
Not setting the state to UNUSED will make the port_id of the device valid for all ether API functions, usually resulting in segfault. Fixes: 284c908cc588 ("app/testpmd: request device removal interrupt") Cc: sta...@dpdk.org Signed-off-by: Gaetan Rivet <gaetan.ri...@6wind.com> --- app/test-pmd/testpmd.c | 1 - lib/librte_ether/rte_ethdev.c | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index e754d12..9142218 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1836,7 +1836,6 @@ rmv_event_callback(void *arg) close_port(port_id); printf("removing device %s\n", dev->device->name); rte_eal_dev_detach(dev->device); - dev->state = RTE_ETH_DEV_UNUSED; } /* This function is used by the interrupt thread */ diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index d4ebb1b..8c365ed 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -453,6 +453,7 @@ rte_eth_dev_detach(uint8_t port_id, char *name) if (ret < 0) goto err; + rte_eth_devices[port_id].state = RTE_ETH_DEV_UNUSED; return 0; err: -- 2.1.4