[08/15] media: atomisp: Fix atomisp_pci_remove()
Commit Message
Fix atomisp_pci_remove():
-Remove uninformative "Removing atomisp driver" log message
-Add missing devm_free_irq(), atomisp_uninitialize_modules() and
pci_free_irq_vectors() calls
-Move atomisp_msi_irq_uninit() down so that the remove() order is
an exact mirror of the probe() order
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/staging/media/atomisp/pci/atomisp_v4l2.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
Comments
On Sun, Dec 31, 2023 at 12:31 PM Hans de Goede <hdegoede@redhat.com> wrote:
...
> -Add missing devm_free_irq(), atomisp_uninitialize_modules() and
> pci_free_irq_vectors() calls
The devm_*_free() is usually a signal about something either tricky or wrong.
Please, split this part and/or explain better why devm_free_irq() has
to be called explicitly.
@@ -1524,11 +1524,10 @@ static void atomisp_pci_remove(struct pci_dev *pdev)
{
struct atomisp_device *isp = pci_get_drvdata(pdev);
- dev_info(&pdev->dev, "Removing atomisp driver\n");
-
atomisp_drvfs_exit();
ia_css_unload_firmware();
+ devm_free_irq(&pdev->dev, pdev->irq, isp);
hmm_cleanup();
pm_runtime_forbid(&pdev->dev);
@@ -1536,8 +1535,10 @@ static void atomisp_pci_remove(struct pci_dev *pdev)
dev_pm_domain_set(&pdev->dev, NULL);
cpu_latency_qos_remove_request(&isp->pm_qos);
- atomisp_msi_irq_uninit(isp);
atomisp_unregister_entities(isp);
+ atomisp_uninitialize_modules(isp);
+ atomisp_msi_irq_uninit(isp);
+ pci_free_irq_vectors(pdev);
}
static const struct pci_device_id atomisp_pci_tbl[] = {