bus/pci: propagate probing error codes
authorDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Fri, 26 Oct 2018 07:54:59 +0000 (09:54 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 29 Oct 2018 00:59:48 +0000 (01:59 +0100)
In a couple of places we check its error code against -EEXIST,
but this function returned either -1, 0, or 1.

This gets critical when hotplugging a device in secondary
process, while the same device is already plugged in the
primary. Failing to "hotplug" it in the primary will cause
the secondary to fail as well.

Fixes: e9d159c3d534 ("eal: allow probing a device again")

Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Acked-by: Thomas Monjalon <thomas@monjalon.net>
drivers/bus/pci/pci_common.c

index feb7980..6276e5d 100644 (file)
@@ -243,7 +243,7 @@ rte_pci_detach_dev(struct rte_pci_device *dev)
 
 /*
  * If vendor/device ID match, call the probe() function of all
- * registered driver for the given device. Return -1 if initialization
+ * registered driver for the given device. Return < 0 if initialization
  * failed, return 1 if no driver is found for this device.
  */
 static int
@@ -253,13 +253,13 @@ pci_probe_all_drivers(struct rte_pci_device *dev)
        int rc = 0;
 
        if (dev == NULL)
-               return -1;
+               return -EINVAL;
 
        FOREACH_DRIVER_ON_PCIBUS(dr) {
                rc = rte_pci_probe_one_driver(dr, dev);
                if (rc < 0)
                        /* negative value is an error */
-                       return -1;
+                       return rc;
                if (rc > 0)
                        /* positive value means driver doesn't support it */
                        continue;