summaryrefslogtreecommitdiff
path: root/drivers/pci
diff options
context:
space:
mode:
authorFaiz Abbas <faiz_abbas@ti.com>2017-08-10 16:54:55 +0530
committerBjorn Helgaas <bhelgaas@google.com>2017-08-22 15:49:33 -0500
commit8c934095fa2f336d92b722f49f78ca7abf47e051 (patch)
treefd6058c40c2a7e60a36206d23b75bd055ea6845a /drivers/pci
parent71cee8e1902a3c1d00e52dc022e1aff3ac2680d3 (diff)
PCI: dwc: Clear MSI interrupt status after it is handled, not before
If the interrupt status is cleared before it is handled, it is possible that another interrupt will trigger while servicing the previous one. This is causing timeouts in some wireless lan cards which use PCIe. Clear MSI interrupt status after it gets serviced instead of before calling generic_handler. Signed-off-by: Faiz Abbas <faiz_abbas@ti.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-By: Joao Pinto <jpinto@synopsys.com>
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/dwc/pcie-designware-host.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/pci/dwc/pcie-designware-host.c b/drivers/pci/dwc/pcie-designware-host.c
index 157621175147..99cb70b5de79 100644
--- a/drivers/pci/dwc/pcie-designware-host.c
+++ b/drivers/pci/dwc/pcie-designware-host.c
@@ -71,9 +71,9 @@ irqreturn_t dw_handle_msi_irq(struct pcie_port *pp)
while ((pos = find_next_bit((unsigned long *) &val, 32,
pos)) != 32) {
irq = irq_find_mapping(pp->irq_domain, i * 32 + pos);
+ generic_handle_irq(irq);
dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_STATUS + i * 12,
4, 1 << pos);
- generic_handle_irq(irq);
pos++;
}
}