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: [email protected]
Signed-off-by: Gaetan Rivet <[email protected]>
---
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