pci: move RTE_PCI_DRV_FORCE_UNBIND handling out of #ifdef
authorDavid Marchand <david.marchand@6wind.com>
Fri, 9 May 2014 13:15:58 +0000 (15:15 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Tue, 13 May 2014 11:21:29 +0000 (13:21 +0200)
Move RTE_PCI_DRV_FORCE_UNBIND flag handling out of RTE_EAL_UNBIND_PORTS section.
This had nothing to do with RTE_EAL_UNBIND_PORTS anyway.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
lib/librte_eal/linuxapp/eal/eal_pci.c

index dadb198..d529ced 100644 (file)
@@ -107,6 +107,45 @@ TAILQ_HEAD(uio_res_list, uio_resource);
 static struct uio_res_list *uio_res_list = NULL;
 static int pci_parse_sysfs_value(const char *filename, uint64_t *val);
 
+/* unbind kernel driver for this device */
+static int
+pci_unbind_kernel_driver(struct rte_pci_device *dev)
+{
+       int n;
+       FILE *f;
+       char filename[PATH_MAX];
+       char buf[BUFSIZ];
+       struct rte_pci_addr *loc = &dev->addr;
+
+       /* open /sys/bus/pci/devices/AAAA:BB:CC.D/driver */
+       rte_snprintf(filename, sizeof(filename),
+                SYSFS_PCI_DEVICES "/" PCI_PRI_FMT "/driver/unbind",
+                loc->domain, loc->bus, loc->devid, loc->function);
+
+       f = fopen(filename, "w");
+       if (f == NULL) /* device was not bound */
+               return 0;
+
+       n = rte_snprintf(buf, sizeof(buf), PCI_PRI_FMT "\n",
+                    loc->domain, loc->bus, loc->devid, loc->function);
+       if ((n < 0) || (n >= (int)sizeof(buf))) {
+               RTE_LOG(ERR, EAL, "%s(): rte_snprintf failed\n", __func__);
+               goto error;
+       }
+       if (fwrite(buf, n, 1, f) == 0) {
+               RTE_LOG(ERR, EAL, "%s(): could not write to %s\n", __func__,
+                               filename);
+               goto error;
+       }
+
+       fclose(f);
+       return 0;
+
+error:
+       fclose(f);
+       return -1;
+}
+
 #ifdef RTE_EAL_UNBIND_PORTS
 #define PROC_MODULES "/proc/modules"
 
@@ -234,46 +273,6 @@ pci_uio_bind_device(struct rte_pci_device *dev, const char *module_name)
        return 0;
 }
 
-/* unbind kernel driver for this device */
-static int
-pci_unbind_kernel_driver(struct rte_pci_device *dev)
-{
-       int n;
-       FILE *f;
-       char filename[PATH_MAX];
-       char buf[BUFSIZ];
-       struct rte_pci_addr *loc = &dev->addr;
-
-       /* open /sys/bus/pci/devices/AAAA:BB:CC.D/driver */
-       rte_snprintf(filename, sizeof(filename),
-                SYSFS_PCI_DEVICES "/" PCI_PRI_FMT "/driver/unbind",
-                loc->domain, loc->bus, loc->devid, loc->function);
-
-       f = fopen(filename, "w");
-       if (f == NULL) /* device was not bound */
-               return 0;
-
-       n = rte_snprintf(buf, sizeof(buf), PCI_PRI_FMT "\n",
-                    loc->domain, loc->bus, loc->devid, loc->function);
-       if ((n < 0) || (n >= (int)sizeof(buf))) {
-               RTE_LOG(ERR, EAL, "%s(): rte_snprintf failed\n", __func__);
-               goto error;
-       }
-       if (fwrite(buf, n, 1, f) == 0) {
-               RTE_LOG(ERR, EAL, "%s(): could not write to %s\n", __func__,
-                               filename);
-               goto error;
-       }
-
-       fclose(f);
-       return 0;
-
-error:
-       fclose(f);
-       return -1;
-}
-
-
 static int
 pci_switch_module(struct rte_pci_driver *dr, struct rte_pci_device *dev,
                  const char *module_name)
@@ -1008,11 +1007,6 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *d
                        /* unbind current driver and bind on igb_uio */
                        if (pci_switch_module(dr, dev, IGB_UIO_NAME) < 0)
                                return -1;
-               } else if (dr->drv_flags & RTE_PCI_DRV_FORCE_UNBIND &&
-                          rte_eal_process_type() == RTE_PROC_PRIMARY) {
-                       /* unbind current driver */
-                       if (pci_unbind_kernel_driver(dev) < 0)
-                               return -1;
                }
 #endif
 
@@ -1020,6 +1014,11 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *d
                        /* map resources for devices that use igb_uio */
                        if (pci_uio_map_resource(dev) < 0)
                                return -1;
+               } else if (dr->drv_flags & RTE_PCI_DRV_FORCE_UNBIND &&
+                          rte_eal_process_type() == RTE_PROC_PRIMARY) {
+                       /* unbind current driver */
+                       if (pci_unbind_kernel_driver(dev) < 0)
+                               return -1;
                }
 
                /* reference driver structure */