diff options
author | Dave Jiang <dave.jiang@intel.com> | 2021-07-15 21:44:07 +0300 |
---|---|---|
committer | Vinod Koul <vkoul@kernel.org> | 2021-07-21 07:39:15 +0300 |
commit | 745e92a6d816277fcbd231bda5ad2d882b22fe52 (patch) | |
tree | aa1ff14f262f93dcae62d03a4bc695b4a6bd863c /drivers/dma/idxd/device.c | |
parent | bd42805b5da33b9c75f3ce0ae9d6ff0ec3f2cd6b (diff) | |
download | linux-745e92a6d816277fcbd231bda5ad2d882b22fe52.tar.xz |
dmaengine: idxd: idxd: move remove() bits for idxd 'struct device' to device.c
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>
Diffstat (limited to 'drivers/dma/idxd/device.c')
-rw-r--r-- | drivers/dma/idxd/device.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/dma/idxd/device.c b/drivers/dma/idxd/device.c index b9aa209efee4..d5a0b6fff3b9 100644 --- a/drivers/dma/idxd/device.c +++ b/drivers/dma/idxd/device.c @@ -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); +} |