bus/vdev: fix devargs after multi-process bus scan
authorQi Zhang <qi.z.zhang@intel.com>
Thu, 25 Oct 2018 03:30:36 +0000 (11:30 +0800)
committerThomas Monjalon <thomas@monjalon.net>
Sun, 28 Oct 2018 17:32:22 +0000 (18:32 +0100)
It's not necessary to insert device argment to devargs_list
during bus scan, but this happens when we try to attach a
device on secondary process. The patch fix the issue.

Fixes: cdb068f031c6 ("bus/vdev: scan by multi-process channel")
Cc: stable@dpdk.org
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
drivers/bus/vdev/vdev.c

index 685cc4e..6952724 100644 (file)
@@ -202,7 +202,9 @@ alloc_devargs(const char *name, const char *args)
 }
 
 static int
-insert_vdev(const char *name, const char *args, struct rte_vdev_device **p_dev)
+insert_vdev(const char *name, const char *args,
+               struct rte_vdev_device **p_dev,
+               bool init)
 {
        struct rte_vdev_device *dev;
        struct rte_devargs *devargs;
@@ -237,7 +239,8 @@ insert_vdev(const char *name, const char *args, struct rte_vdev_device **p_dev)
        }
 
        TAILQ_INSERT_TAIL(&vdev_device_list, dev, next);
-       rte_devargs_insert(devargs);
+       if (init)
+               rte_devargs_insert(devargs);
 
        if (p_dev)
                *p_dev = dev;
@@ -257,7 +260,7 @@ rte_vdev_init(const char *name, const char *args)
        int ret;
 
        rte_spinlock_recursive_lock(&vdev_device_list_lock);
-       ret = insert_vdev(name, args, &dev);
+       ret = insert_vdev(name, args, &dev, true);
        if (ret == 0) {
                ret = vdev_probe_all_drivers(dev);
                if (ret) {
@@ -383,7 +386,7 @@ vdev_action(const struct rte_mp_msg *mp_msg, const void *peer)
                break;
        case VDEV_SCAN_ONE:
                VDEV_LOG(INFO, "receive vdev, %s", in->name);
-               ret = insert_vdev(in->name, NULL, NULL);
+               ret = insert_vdev(in->name, NULL, NULL, false);
                if (ret == -EEXIST)
                        VDEV_LOG(DEBUG, "device already exist, %s", in->name);
                else if (ret < 0)