There is no use for pci_get_kernel_driver_by_path() apart recognising
kernel driver and fill kdrv field.

Signed-off-by: David Marchand <david.marchand at 6wind.com>
---
Changes since v1:
- updated the commitlog, Huawei already did the "unknown" -> "none"
  change, so this patch ends up just refactoring code

---
 lib/librte_eal/linuxapp/eal/eal_pci.c | 48 ++++++++++++++---------------------
 1 file changed, 19 insertions(+), 29 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c 
b/lib/librte_eal/linuxapp/eal/eal_pci.c
index 6751b48..c3118fc 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
@@ -94,32 +94,37 @@ error:
 }

 static int
-pci_get_kernel_driver_by_path(const char *filename, char *dri_name)
+pci_parse_sysfs_driver(const char *filename, struct rte_pci_device *dev)
 {
        int count;
        char path[PATH_MAX];
        char *name;

-       if (!filename || !dri_name)
-               return -1;
-
        count = readlink(filename, path, PATH_MAX);
        if (count >= PATH_MAX)
                return -1;

-       /* For device does not have a driver */
-       if (count < 0)
-               return 1;
+       dev->kdrv = RTE_KDRV_NONE;

-       path[count] = '\0';
+       if (count > 0) {
+               dev->kdrv = RTE_KDRV_UNKNOWN;

-       name = strrchr(path, '/');
-       if (name) {
-               strncpy(dri_name, name + 1, strlen(name + 1) + 1);
-               return 0;
+               path[count] = '\0';
+               name = strrchr(path, '/');
+               if (name) {
+                       name[0] = '\0';
+                       name++;
+               }
+
+               if (!strcmp(name, "vfio-pci"))
+                       dev->kdrv = RTE_KDRV_VFIO;
+               else if (!strcmp(name, "igb_uio"))
+                       dev->kdrv = RTE_KDRV_IGB_UIO;
+               else if (!strcmp(name, "uio_pci_generic"))
+                       dev->kdrv = RTE_KDRV_UIO_GENERIC;
        }

-       return -1;
+       return 0;
 }

 /* Map pci device */
@@ -260,8 +265,6 @@ pci_scan_one(const char *dirname, uint16_t domain, uint8_t 
bus,
        unsigned long tmp;
        struct rte_pci_device *dev;
        struct rte_pci_device *dev2;
-       char driver[PATH_MAX];
-       int ret;

        dev = malloc(sizeof(*dev));
        if (dev == NULL)
@@ -341,25 +344,12 @@ pci_scan_one(const char *dirname, uint16_t domain, 
uint8_t bus,

        /* parse driver */
        snprintf(filename, sizeof(filename), "%s/driver", dirname);
-       ret = pci_get_kernel_driver_by_path(filename, driver);
-       if (ret < 0) {
+       if (pci_parse_sysfs_driver(filename, dev) < 0) {
                RTE_LOG(ERR, EAL, "Fail to get kernel driver\n");
                free(dev);
                return -1;
        }

-       if (!ret) {
-               if (!strcmp(driver, "vfio-pci"))
-                       dev->kdrv = RTE_KDRV_VFIO;
-               else if (!strcmp(driver, "igb_uio"))
-                       dev->kdrv = RTE_KDRV_IGB_UIO;
-               else if (!strcmp(driver, "uio_pci_generic"))
-                       dev->kdrv = RTE_KDRV_UIO_GENERIC;
-               else
-                       dev->kdrv = RTE_KDRV_UNKNOWN;
-       } else
-               dev->kdrv = RTE_KDRV_UNKNOWN;
-
        dev2 = pci_find_device(&dev->addr);
        if (!dev2)
                pci_add_device(dev);
-- 
1.9.1

Reply via email to