aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJisheng Zhang <Jisheng.Zhang@synaptics.com>2019-03-29 07:56:25 -0400
committerBjorn Helgaas <bhelgaas@google.com>2019-05-07 09:52:23 -0400
commit3ebc269c197ee6a9788aeb76ebcc9132814a75e5 (patch)
tree647cd03e288756d0505e7e9e420b5cfe7df25cc9
parent322f03436692481993d389f539c016d20bb0fa1d (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.c6
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
299void dw_pcie_free_msi(struct pcie_port *pp) 299void 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);