For vdev, just calling rte_eth_dev_close() isn't enough to free all
the resources allocated during device probe, e.g. for virtio-user,
virtio_user_pmd_remove(), i.e. the remove() method of a vdev driver,
needs to be called to unlink the socket file created during device
probe. So this patch calls the rte_eth_dev_detach() for vdev when
quitting testpmd.

Cc: maxime.coque...@redhat.com
Cc: ferruh.yi...@intel.com
Cc: tiwei....@intel.com
Cc: lei.a....@intel.com

Signed-off-by: Zhiyong Yang <zhiyong.y...@intel.com>
---
 app/test-pmd/testpmd.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 134401603..1d308f056 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -2011,6 +2011,8 @@ detach_port(portid_t port_id)
 void
 pmd_test_exit(void)
 {
+       const struct rte_bus *bus;
+       struct rte_device *device;
        portid_t pt_id;
        int ret;
 
@@ -2020,10 +2022,14 @@ pmd_test_exit(void)
        if (ports != NULL) {
                no_link_check = 1;
                RTE_ETH_FOREACH_DEV(pt_id) {
+                       device = rte_eth_devices[pt_id].device;
+                       bus = rte_bus_find_by_device(device);
                        printf("\nShutting down port %d...\n", pt_id);
                        fflush(stdout);
                        stop_port(pt_id);
                        close_port(pt_id);
+                       if (bus && !strcmp(bus->name, "vdev"))
+                               detach_port(pt_id);
                }
        }
 
-- 
2.14.3

Reply via email to