dmaengine: idxd: idxd: move remove() bits for idxd 'struct device' to device.c
authorDave Jiang <dave.jiang@intel.com>
Thu, 15 Jul 2021 18:44:07 +0000 (11:44 -0700)
committerVinod Koul <vkoul@kernel.org>
Wed, 21 Jul 2021 04:39:15 +0000 (10:09 +0530)
Move the code related to a ->remove() function for the idxd
'struct device' to device.c to prep for the idxd device
sub-driver in device.c.

Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/162637464768.744545.15797285510999151668.stgit@djiang5-desk3.ch.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/idxd/device.c
drivers/dma/idxd/idxd.h
drivers/dma/idxd/sysfs.c

index b9aa209..d5a0b6f 100644 (file)
@@ -1327,3 +1327,25 @@ int idxd_device_drv_probe(struct idxd_dev *idxd_dev)
 
        return 0;
 }
+
+void idxd_device_drv_remove(struct idxd_dev *idxd_dev)
+{
+       struct device *dev = &idxd_dev->conf_dev;
+       struct idxd_device *idxd = idxd_dev_to_idxd(idxd_dev);
+       int i;
+
+       for (i = 0; i < idxd->max_wqs; i++) {
+               struct idxd_wq *wq = idxd->wqs[i];
+               struct device *wq_dev = wq_confdev(wq);
+
+               if (wq->state == IDXD_WQ_DISABLED)
+                       continue;
+               dev_warn(dev, "Active wq %d on disable %s.\n", i, dev_name(wq_dev));
+               device_release_driver(wq_dev);
+       }
+
+       idxd_unregister_dma_device(idxd);
+       idxd_device_disable(idxd);
+       if (test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
+               idxd_device_reset(idxd);
+}
index dbbd36f..1c8abba 100644 (file)
@@ -499,6 +499,7 @@ void idxd_unmask_msix_vector(struct idxd_device *idxd, int vec_id);
 
 /* device control */
 int idxd_device_drv_probe(struct idxd_dev *idxd_dev);
+void idxd_device_drv_remove(struct idxd_dev *idxd_dev);
 int drv_enable_wq(struct idxd_wq *wq);
 void drv_disable_wq(struct idxd_wq *wq);
 int idxd_device_init_reset(struct idxd_device *idxd);
index 221a61e..abea8ac 100644 (file)
@@ -66,26 +66,8 @@ static int idxd_dsa_drv_probe(struct idxd_dev *idxd_dev)
 
 static void idxd_dsa_drv_remove(struct idxd_dev *idxd_dev)
 {
-       struct device *dev = &idxd_dev->conf_dev;
-
        if (is_idxd_dev(idxd_dev)) {
-               struct idxd_device *idxd = idxd_dev_to_idxd(idxd_dev);
-               int i;
-
-               for (i = 0; i < idxd->max_wqs; i++) {
-                       struct idxd_wq *wq = idxd->wqs[i];
-
-                       if (wq->state == IDXD_WQ_DISABLED)
-                               continue;
-                       dev_warn(dev, "Active wq %d on disable %s.\n", i,
-                                dev_name(wq_confdev(wq)));
-                       device_release_driver(wq_confdev(wq));
-               }
-
-               idxd_unregister_dma_device(idxd);
-               idxd_device_disable(idxd);
-               if (test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
-                       idxd_device_reset(idxd);
+               idxd_device_drv_remove(idxd_dev);
                return;
        }