devargs: simplify parameters of removal function
authorThomas Monjalon <thomas@monjalon.net>
Wed, 19 Sep 2018 21:55:01 +0000 (23:55 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 11 Oct 2018 12:09:24 +0000 (14:09 +0200)
The function rte_devargs_remove(), which is intended to be internal,
can take a devargs structure as argument.
The matching is still using string comparison of bus name and
device name.
It is simpler and may allow a different devargs matching in future.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Reviewed-by: Stephen Hemminger <stephen@networkplumber.org>
doc/guides/rel_notes/release_18_11.rst
drivers/bus/ifpga/ifpga_bus.c
drivers/bus/vdev/vdev.c
lib/librte_eal/common/eal_common_dev.c
lib/librte_eal/common/eal_common_devargs.c
lib/librte_eal/common/include/rte_devargs.h

index a7f5ff8..66d28ce 100644 (file)
@@ -142,6 +142,9 @@ API Changes
   ``rte_eal_parse_devargs_str()``, ``rte_eal_devargs_add()``,
   ``rte_eal_devargs_type_count()``, and ``rte_eal_devargs_dump()``.
 
+* eal: The parameters of the function ``rte_devargs_remove()`` have changed
+  from bus and device names to ``struct rte_devargs``.
+
 * mbuf: The ``__rte_mbuf_raw_free()`` and ``__rte_pktmbuf_prefree_seg()``
   functions were deprecated since 17.05 and are replaced by
   ``rte_mbuf_raw_free()`` and ``rte_pktmbuf_prefree_seg()``.
index c54b59d..3ef035b 100644 (file)
@@ -361,7 +361,6 @@ static int
 ifpga_unplug(struct rte_device *dev)
 {
        struct rte_afu_device *afu_dev = NULL;
-       struct rte_devargs *devargs = NULL;
        int ret;
 
        if (dev == NULL)
@@ -371,15 +370,13 @@ ifpga_unplug(struct rte_device *dev)
        if (!afu_dev)
                return -ENOENT;
 
-       devargs = dev->devargs;
-
        ret = ifpga_remove_driver(afu_dev);
        if (ret)
                return ret;
 
        TAILQ_REMOVE(&ifpga_afu_dev_list, afu_dev, next);
 
-       rte_devargs_remove(devargs->bus->name, devargs->name);
+       rte_devargs_remove(dev->devargs);
        free(afu_dev);
        return 0;
 
index ef3ad6d..efca962 100644 (file)
@@ -249,7 +249,6 @@ int
 rte_vdev_init(const char *name, const char *args)
 {
        struct rte_vdev_device *dev;
-       struct rte_devargs *devargs;
        int ret;
 
        rte_spinlock_recursive_lock(&vdev_device_list_lock);
@@ -260,9 +259,8 @@ rte_vdev_init(const char *name, const char *args)
                        if (ret > 0)
                                VDEV_LOG(ERR, "no driver found for %s", name);
                        /* If fails, remove it from vdev list */
-                       devargs = dev->device.devargs;
                        TAILQ_REMOVE(&vdev_device_list, dev, next);
-                       rte_devargs_remove(devargs->bus->name, devargs->name);
+                       rte_devargs_remove(dev->device.devargs);
                        free(dev);
                }
        }
@@ -290,7 +288,6 @@ int
 rte_vdev_uninit(const char *name)
 {
        struct rte_vdev_device *dev;
-       struct rte_devargs *devargs;
        int ret;
 
        if (name == NULL)
@@ -309,8 +306,7 @@ rte_vdev_uninit(const char *name)
                goto unlock;
 
        TAILQ_REMOVE(&vdev_device_list, dev, next);
-       devargs = dev->device.devargs;
-       rte_devargs_remove(devargs->bus->name, devargs->name);
+       rte_devargs_remove(dev->device.devargs);
        free(dev);
 
 unlock:
index 678dbca..e1d9e8e 100644 (file)
@@ -186,7 +186,7 @@ int __rte_experimental rte_eal_hotplug_add(const char *busname, const char *devn
        return 0;
 
 err_devarg:
-       if (rte_devargs_remove(busname, devname)) {
+       if (rte_devargs_remove(da) != 0) {
                free(da->args);
                free(da);
        }
@@ -227,7 +227,7 @@ rte_eal_hotplug_remove(const char *busname, const char *devname)
        if (ret)
                RTE_LOG(ERR, EAL, "Driver cannot detach the device (%s)\n",
                        dev->name);
-       rte_devargs_remove(busname, devname);
+       rte_devargs_remove(dev->devargs);
        return ret;
 }
 
index 5cb5c62..69e9e32 100644 (file)
@@ -263,7 +263,7 @@ rte_devargs_insert(struct rte_devargs *da)
 {
        int ret;
 
-       ret = rte_devargs_remove(da->bus->name, da->name);
+       ret = rte_devargs_remove(da);
        if (ret < 0)
                return ret;
        TAILQ_INSERT_TAIL(&devargs_list, da, next);
@@ -309,14 +309,17 @@ fail:
 }
 
 int __rte_experimental
-rte_devargs_remove(const char *busname, const char *devname)
+rte_devargs_remove(struct rte_devargs *devargs)
 {
        struct rte_devargs *d;
        void *tmp;
 
+       if (devargs == NULL || devargs->bus == NULL)
+               return -1;
+
        TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) {
-               if (strcmp(d->bus->name, busname) == 0 &&
-                   strcmp(d->name, devname) == 0) {
+               if (strcmp(d->bus->name, devargs->bus->name) == 0 &&
+                   strcmp(d->name, devargs->name) == 0) {
                        TAILQ_REMOVE(&devargs_list, d, next);
                        free(d->args);
                        free(d);
index 0eef6e9..b1f121f 100644 (file)
@@ -176,11 +176,8 @@ int rte_devargs_add(enum rte_devtype devtype, const char *devargs_str);
  * Its resources are freed.
  * If the devargs cannot be found, nothing happens.
  *
- * @param busname
- *   bus name of the devargs to remove.
- *
- * @param devname
- *   device name of the devargs to remove.
+ * @param devargs
+ *   The instance or a copy of devargs to remove.
  *
  * @return
  *   0 on success.
@@ -188,8 +185,7 @@ int rte_devargs_add(enum rte_devtype devtype, const char *devargs_str);
  *   >0 if the devargs was not within the user device list.
  */
 __rte_experimental
-int rte_devargs_remove(const char *busname,
-                      const char *devname);
+int rte_devargs_remove(struct rte_devargs *devargs);
 
 /**
  * Count the number of user devices of a specified type