• Bjørn Erik Nilsen's avatar
    PCI: designware: Fix crash in dw_msi_teardown_irq() · be3f48cb
    Bjørn Erik Nilsen authored
    904d0e78 ("PCI: designware: Add irq_create_mapping()") resulted in
    pre-allocated irq descs.  Problem was that in assign_irq() these descs were
    explicitly allocated and hence also freed, resulting in a crash.  We also
    need to clear the entire irq range in teardown.  With this commit the
    teardown basically does exactly the opposite of what was done in setup.
    
    The crash this fixes looks like:
    
      Unable to handle kernel NULL pointer dereference at virtual address 00000020
      PC is at dw_msi_teardown_irq+0x40/0x118
      LR is at trace_hardirqs_on_caller+0xf4/0x1c0
      Backtrace:
      [<802c401c>] (dw_msi_teardown_irq+0x0/0x118) from [<802c1844>] (arch_teardown_msi_irq+0x3c/0x40)
      [<802c1808>] (arch_teardown_msi_irq+0x0/0x40) from [<802c1a08>] (default_teardown_msi_irqs+0x68/0x84)
      [<802c19a0>] (default_teardown_msi_irqs+0x0/0x84) from [<802c1a34>] (arch_teardown_msi_irqs+0x10/0x14)
      [<802c1a24>] (arch_teardown_msi_irqs+0x0/0x14) from [<802c1ad0>] (free_msi_irqs+0x98/0x144)
      [<802c1a38>] (free_msi_irqs+0x0/0x144) from [<802c2570>] (pci_disable_msi+0x48/0x60)
      [<802c2528>] (pci_disable_msi+0x0/0x60) from [<7f0057d4>] (sxdma_irq_free+0x44/0x48 [sxdma])
    
    [bhelgaas: add crash info]
    Tested-by: default avatarMohit Kumar <mohit.kumar@st.com>
    Signed-off-by: default avatarBjørn Erik Nilsen <ben@datarespons.no>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Acked-by: default avatarMarek Vasut <marex@denx.de>
    Acked-by: default avatarJingoo Han <jg1.han@samsung.com>
    be3f48cb
pcie-designware.c 21.4 KB