ethdev: fix device state on detach
authorGaetan Rivet <gaetan.rivet@6wind.com>
Wed, 26 Jul 2017 13:35:52 +0000 (15:35 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 31 Jul 2017 12:08:17 +0000 (14:08 +0200)
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 <gaetan.rivet@6wind.com>
Tested-by: Shachar Beiser <shacharbe@mellanox.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
app/test-pmd/testpmd.c
lib/librte_ether/rte_ethdev.c

index e754d12..9142218 100644 (file)
@@ -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 */
index d4ebb1b..8c365ed 100644 (file)
@@ -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: