From f2b24fb03e8fcd21d10d5144ce257d0fe221adbc Mon Sep 17 00:00:00 2001 From: Gaetan Rivet Date: Wed, 26 Jul 2017 15:35:52 +0200 Subject: [PATCH] ethdev: fix device state on detach The device state should be handled by the ethdev 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 ethdev API functions, usually resulting in segfault. Fixes: 284c908cc588 ("app/testpmd: request device removal interrupt") Cc: stable@dpdk.org Signed-off-by: Gaetan Rivet Tested-by: Shachar Beiser Acked-by: Adrien Mazarguil --- 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 e754d12aae..9142218112 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 d4ebb1b675..8c365ed64c 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.20.1