From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: [PATCH 2/2] bus/vdev: fix hotplug twice Date: Thu, 21 Feb 2019 20:01:25 +0100 Message-ID: <20190221190125.24140-3-thomas@monjalon.net> References: <20190221190125.24140-1-thomas@monjalon.net> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Cc: Raslan Darawsheh , stable@dpdk.org To: dev@dpdk.org Return-path: In-Reply-To: <20190221190125.24140-1-thomas@monjalon.net> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Raslan Darawsheh In case vdev was already probed, it shouldn't be probed again, and it should return -EEXIST as error. There are some checks in vdev_probe() and insert_vdev(), but a check was missing in vdev_plug(). The check is moved in vdev_probe_all_drivers() which is called in all code paths. Fixes: e9d159c3d534 ("eal: allow probing a device again") Cc: stable@dpdk.org Signed-off-by: Raslan Darawsheh Signed-off-by: Thomas Monjalon --- drivers/bus/vdev/vdev.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c index 7225411791..87f0e2b6bb 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -143,6 +143,9 @@ vdev_probe_all_drivers(struct rte_vdev_device *dev) struct rte_vdev_driver *driver; int ret; + if (rte_dev_is_probed(&dev->device)) + return -EEXIST; + name = rte_vdev_device_name(dev); VDEV_LOG(DEBUG, "Search driver to probe device %s", name); @@ -480,7 +483,7 @@ static int vdev_probe(void) { struct rte_vdev_device *dev; - int ret = 0; + int r, ret = 0; /* call the init function for each virtual device */ TAILQ_FOREACH(dev, &vdev_device_list, next) { @@ -489,10 +492,10 @@ vdev_probe(void) * we call each driver probe. */ - if (rte_dev_is_probed(&dev->device)) - continue; - - if (vdev_probe_all_drivers(dev)) { + r = vdev_probe_all_drivers(dev); + if (r != 0) { + if (r == -EEXIST) + continue; VDEV_LOG(ERR, "failed to initialize %s device", rte_vdev_device_name(dev)); ret = -1; -- 2.20.1