On 3/8/25 11:20 PM, Shuai Xue wrote: > The idxd_cleanup() helper cleans up perfmon, interrupts, internals and > so on. Refactor remove call with the idxd_cleanup() helper to avoid code > duplication. Note, this also fixes the missing put_device() for idxd > groups, enginces and wqs. > > Fixes: bfe1d56091c1 ("dmaengine: idxd: Init and probe for Intel data accelerators") > Cc: stable@xxxxxxxxxxxxxxx > Suggested-by: Vinicius Costa Gomes <vinicius.gomes@xxxxxxxxx> > Signed-off-by: Shuai Xue <xueshuai@xxxxxxxxxxxxxxxxx> Reviewed-by: Dave Jiang <dave.jiang@xxxxxxxxx> > --- > drivers/dma/idxd/init.c | 14 ++------------ > 1 file changed, 2 insertions(+), 12 deletions(-) > > diff --git a/drivers/dma/idxd/init.c b/drivers/dma/idxd/init.c > index ecb8d534fac4..22b411b470be 100644 > --- a/drivers/dma/idxd/init.c > +++ b/drivers/dma/idxd/init.c > @@ -1310,7 +1310,6 @@ static void idxd_shutdown(struct pci_dev *pdev) > static void idxd_remove(struct pci_dev *pdev) > { > struct idxd_device *idxd = pci_get_drvdata(pdev); > - struct idxd_irq_entry *irq_entry; > > idxd_unregister_devices(idxd); > /* > @@ -1323,21 +1322,12 @@ static void idxd_remove(struct pci_dev *pdev) > get_device(idxd_confdev(idxd)); > device_unregister(idxd_confdev(idxd)); > idxd_shutdown(pdev); > - if (device_pasid_enabled(idxd)) > - idxd_disable_system_pasid(idxd); > idxd_device_remove_debugfs(idxd); > - > - irq_entry = idxd_get_ie(idxd, 0); > - free_irq(irq_entry->vector, irq_entry); > - pci_free_irq_vectors(pdev); > + idxd_cleanup(idxd); > pci_iounmap(pdev, idxd->reg_base); > - if (device_user_pasid_enabled(idxd)) > - idxd_disable_sva(pdev); > - pci_disable_device(pdev); > - destroy_workqueue(idxd->wq); > - perfmon_pmu_remove(idxd); > put_device(idxd_confdev(idxd)); > idxd_free(idxd); > + pci_disable_device(pdev); > } > > static struct pci_driver idxd_pci_driver = {