On 05/23/2018 08:18 AM, Geert Uytterhoeven wrote: > Hi Marek, > > On Tue, May 22, 2018 at 11:53 PM, Marek Vasut <marek.vasut@xxxxxxxxx> wrote: >> On 05/22/2018 08:36 PM, Geert Uytterhoeven wrote: >>> On Mon, May 21, 2018 at 3:11 PM, Marek Vasut <marek.vasut@xxxxxxxxx> wrote: >>>> --- a/drivers/pci/host/pcie-rcar.c >>>> +++ b/drivers/pci/host/pcie-rcar.c >>>> @@ -900,6 +900,28 @@ static int rcar_pcie_enable_msi(struct rcar_pcie *pcie) >>>> return err; >>>> } >>>> >>>> +static void rcar_pcie_teardown_msi(struct rcar_pcie *pcie) >>>> +{ >>>> + struct rcar_msi *msi = &pcie->msi; >>>> + int irq, i; >>>> + >>>> + /* Disable all MSI interrupts */ >>>> + rcar_pci_write_reg(pcie, 0, PCIEMSIIER); >>>> + >>>> + /* Disable address decoding of the MSI interrupt, MSIFE */ >>>> + rcar_pci_write_reg(pcie, 0, PCIEMSIALR); >>>> + >>>> + free_pages(msi->pages, 0); >>>> + >>>> + for (i = 0; i < INT_PCI_MSI_NR; i++) { >>>> + irq = irq_find_mapping(msi->domain, i); >>>> + if (irq > 0) >>>> + irq_dispose_mapping(irq); >>>> + } >>> >>> Note that similar calls to irq_dispose_mapping() should be added to the >>> failure path of rcar_pcie_enable_msi(), too. >> >> There are no failures happening in rcar_pcie_enable_msi() after the >> mapping is created, just memory writes, so no. Did I miss something there ? > > In my copy, there are two calls to devm_request_irq(). If they fail, the > IRQ domain is removed, but the mappings are never disposed of. Ah, true, I'll pull out a bit of the rcar_pcie_teardown_msi and call it in the failpath to remove the mapping. Thanks -- Best regards, Marek Vasut