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>
This commit is contained in:
parent
bd42805b5d
commit
745e92a6d8
3 changed files with 24 additions and 19 deletions
|
@ -1327,3 +1327,25 @@ int idxd_device_drv_probe(struct idxd_dev *idxd_dev)
|
||||||
|
|
||||||
return 0;
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -499,6 +499,7 @@ void idxd_unmask_msix_vector(struct idxd_device *idxd, int vec_id);
|
||||||
|
|
||||||
/* device control */
|
/* device control */
|
||||||
int idxd_device_drv_probe(struct idxd_dev *idxd_dev);
|
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);
|
int drv_enable_wq(struct idxd_wq *wq);
|
||||||
void drv_disable_wq(struct idxd_wq *wq);
|
void drv_disable_wq(struct idxd_wq *wq);
|
||||||
int idxd_device_init_reset(struct idxd_device *idxd);
|
int idxd_device_init_reset(struct idxd_device *idxd);
|
||||||
|
|
|
@ -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)
|
static void idxd_dsa_drv_remove(struct idxd_dev *idxd_dev)
|
||||||
{
|
{
|
||||||
struct device *dev = &idxd_dev->conf_dev;
|
|
||||||
|
|
||||||
if (is_idxd_dev(idxd_dev)) {
|
if (is_idxd_dev(idxd_dev)) {
|
||||||
struct idxd_device *idxd = idxd_dev_to_idxd(idxd_dev);
|
idxd_device_drv_remove(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);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue