Move device unplug out of the code dealing with VFIO, interrupts and IO devices.
Signed-off-by: David Marchand <[email protected]> --- drivers/bus/fslmc/fslmc_bus.c | 15 ++++++++++++++- drivers/bus/fslmc/fslmc_vfio.c | 10 ---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c index 4b80948aee..a03ef6051a 100644 --- a/drivers/bus/fslmc/fslmc_bus.c +++ b/drivers/bus/fslmc/fslmc_bus.c @@ -519,10 +519,23 @@ fslmc_bus_match(const struct rte_driver *drv, const struct rte_device *dev) } static int -rte_fslmc_close(struct rte_bus *bus __rte_unused) +fslmc_bus_unplug_device(struct rte_device *rte_dev); + +static int +rte_fslmc_close(struct rte_bus *bus) { + struct rte_dpaa2_device *dev; int ret = 0; + RTE_BUS_FOREACH_DEV(dev, bus) { + if (dev->dev_type != DPAA2_ETH && + dev->dev_type != DPAA2_CRYPTO && + dev->dev_type != DPAA2_QDMA) + continue; + if (rte_dev_is_probed(&dev->device) && fslmc_bus_unplug_device(&dev->device)) + DPAA2_BUS_ERR("Unable to remove %s", dev->device.name); + } + ret = fslmc_vfio_close_group(); if (ret) DPAA2_BUS_INFO("Unable to close devices %d", ret); diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c index d67232c31b..5720f366db 100644 --- a/drivers/bus/fslmc/fslmc_vfio.c +++ b/drivers/bus/fslmc/fslmc_vfio.c @@ -1392,7 +1392,6 @@ fslmc_close_iodevices(struct rte_dpaa2_device *dev, int vfio_fd) { struct rte_dpaa2_object *object = NULL; - const struct rte_dpaa2_driver *drv; int ret; switch (dev->dev_type) { @@ -1408,15 +1407,6 @@ fslmc_close_iodevices(struct rte_dpaa2_device *dev, continue; } break; - case DPAA2_ETH: - case DPAA2_CRYPTO: - case DPAA2_QDMA: - if (dev->device.driver != NULL) { - drv = RTE_BUS_DRIVER(dev->device.driver, *drv); - if (drv->remove && drv->remove(dev)) - DPAA2_BUS_ERR("Unable to remove"); - } - break; default: break; } -- 2.54.0

