eal: allow probing a device again
[dpdk.git] / drivers / bus / vdev / vdev.c
index efca962..06f3148 100644 (file)
@@ -150,10 +150,9 @@ vdev_probe_all_drivers(struct rte_vdev_device *dev)
 
        if (vdev_parse(name, &driver))
                return -1;
-       dev->device.driver = &driver->driver;
        ret = driver->probe(dev);
-       if (ret)
-               dev->device.driver = NULL;
+       if (ret == 0)
+               dev->device.driver = &driver->driver;
        return ret;
 }
 
@@ -227,6 +226,11 @@ insert_vdev(const char *name, const char *args, struct rte_vdev_device **p_dev)
        dev->device.name = devargs->name;
 
        if (find_vdev(name)) {
+               /*
+                * A vdev is expected to have only one port.
+                * So there is no reason to try probing again,
+                * even with new arguments.
+                */
                ret = -EEXIST;
                goto fail;
        }
@@ -456,6 +460,7 @@ vdev_scan(void)
                        continue;
                }
 
+               dev->device.bus = &rte_vdev_bus;
                dev->device.devargs = devargs;
                dev->device.numa_node = SOCKET_ID_ANY;
                dev->device.name = devargs->name;
@@ -481,7 +486,7 @@ vdev_probe(void)
                 * we call each driver probe.
                 */
 
-               if (dev->device.driver)
+               if (rte_dev_is_probed(&dev->device))
                        continue;
 
                if (vdev_probe_all_drivers(dev)) {