Message ID | 1514925904-24001-1-git-send-email-okaya@codeaurora.org (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On Tue, Jan 2, 2018 at 9:45 PM, Sinan Kaya <okaya@codeaurora.org> wrote: > 'Commit cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during > shutdown")' revealed a resource leak in rtsx_pci driver during shutdown. > > Issue shows up as a warning during the shutdown step as follows: > > remove_proc_entry: removing non-empty directory 'irq/17', leaking at least > 'rtsx_pci' > WARNING: CPU: 0 PID: 1578 at fs/proc/generic.c:572 > remove_proc_entry+0x11d/0x130 > Modules linked in <long list but none that are out-of-tree> > ... > Call Trace: > unregister_irq_proc > free_desc > irq_free_descs > mp_unmap_irq > acpi_unregister_gsi_apic > acpi_pci_irq_disable > do_pci_disable_device > pci_disable_device > device_shutdown > kernel_restart > Sys_reboot > > Even though rtsx_pci driver implements a shutdown callback, it is not > releasing the interrupt that it registered during probe. This is causing > the ACPI layer to complain that the shared IRQ is in use while freeing > IRQ. > > This code releases the IRQ to prevent resource leak and eliminate the > warning. > > Link: https://bugzilla.kernel.org/show_bug.cgi?id=198141 > Reported-by: Chris Clayton <chris2553@googlemail.com> > Fixes: cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during shutdown") > Tested-by: Chris Clayton <chris2553@googlemail.com> > Signed-off-by: Sinan Kaya <okaya@codeaurora.org> > --- > drivers/mfd/rtsx_pcr.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/mfd/rtsx_pcr.c b/drivers/mfd/rtsx_pcr.c > index 590fb9a..bd504b6 100644 > --- a/drivers/mfd/rtsx_pcr.c > +++ b/drivers/mfd/rtsx_pcr.c > @@ -1543,6 +1543,7 @@ static void rtsx_pci_shutdown(struct pci_dev *pcidev) > rtsx_pci_power_off(pcr, HOST_ENTER_S1); > > pci_disable_device(pcidev); > + free_irq(pcr->irq, (void *)pcr); Do you need to disable MSI here too? > } > > #else /* CONFIG_PM */ > --
On 1/3/2018 7:06 AM, Rafael J. Wysocki wrote: >> pci_disable_device(pcidev); >> + free_irq(pcr->irq, (void *)pcr); > Do you need to disable MSI here too? > Makes sense. I'll post V2 in a minute.
diff --git a/drivers/mfd/rtsx_pcr.c b/drivers/mfd/rtsx_pcr.c index 590fb9a..bd504b6 100644 --- a/drivers/mfd/rtsx_pcr.c +++ b/drivers/mfd/rtsx_pcr.c @@ -1543,6 +1543,7 @@ static void rtsx_pci_shutdown(struct pci_dev *pcidev) rtsx_pci_power_off(pcr, HOST_ENTER_S1); pci_disable_device(pcidev); + free_irq(pcr->irq, (void *)pcr); } #else /* CONFIG_PM */