diff options
author | Jisheng Zhang <Jisheng.Zhang@synaptics.com> | 2019-03-29 07:56:25 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2019-05-07 09:52:23 -0400 |
commit | 3ebc269c197ee6a9788aeb76ebcc9132814a75e5 (patch) | |
tree | 647cd03e288756d0505e7e9e420b5cfe7df25cc9 | |
parent | 322f03436692481993d389f539c016d20bb0fa1d (diff) |
PCI: dwc: Fix dw_pcie_free_msi() if msi_irq is invalid
Check msi_irq variable before calling irq_set_chained_handler() and
irq_set_handler_data(), lest we call those functions for an invalid MSI
IRQ.
Signed-off-by: Jisheng Zhang <Jisheng.Zhang@synaptics.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
-rw-r--r-- | drivers/pci/controller/dwc/pcie-designware-host.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c index 25087d3c9a82..1040939f45b4 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c | |||
@@ -298,8 +298,10 @@ int dw_pcie_allocate_domains(struct pcie_port *pp) | |||
298 | 298 | ||
299 | void dw_pcie_free_msi(struct pcie_port *pp) | 299 | void dw_pcie_free_msi(struct pcie_port *pp) |
300 | { | 300 | { |
301 | irq_set_chained_handler(pp->msi_irq, NULL); | 301 | if (pp->msi_irq) { |
302 | irq_set_handler_data(pp->msi_irq, NULL); | 302 | irq_set_chained_handler(pp->msi_irq, NULL); |
303 | irq_set_handler_data(pp->msi_irq, NULL); | ||
304 | } | ||
303 | 305 | ||
304 | irq_domain_remove(pp->msi_domain); | 306 | irq_domain_remove(pp->msi_domain); |
305 | irq_domain_remove(pp->irq_domain); | 307 | irq_domain_remove(pp->irq_domain); |