summaryrefslogtreecommitdiffstats
path: root/drivers/pci/pcie
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2018-06-06 16:10:06 -0500
committerBjorn Helgaas <bhelgaas@google.com>2018-06-06 16:10:06 -0500
commit8e069da28dfb09b78938395ebfb45a279507faf3 (patch)
treeba3c9aa3fe53563bd80b5e62de63b82da8bb02db /drivers/pci/pcie
parent08b5b2f7831a5378434bd8cc19e9239f3a3b6134 (diff)
parent56abbf8ad73c89d0a4c3c84b1449ceaaabd1b8c7 (diff)
downloadlinux-stable-8e069da28dfb09b78938395ebfb45a279507faf3.tar.gz
linux-stable-8e069da28dfb09b78938395ebfb45a279507faf3.tar.bz2
linux-stable-8e069da28dfb09b78938395ebfb45a279507faf3.zip
Merge branch 'pci/dpc'
- clear interrupt status in top half to avoid interrupt storm (Oza Pawandeep) * pci/dpc: PCI/DPC: Clear interrupt status in interrupt handler top half
Diffstat (limited to 'drivers/pci/pcie')
-rw-r--r--drivers/pci/pcie/dpc.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c
index 6064041409d2..d6436681c535 100644
--- a/drivers/pci/pcie/dpc.c
+++ b/drivers/pci/pcie/dpc.c
@@ -104,7 +104,7 @@ static pci_ers_result_t dpc_reset_link(struct pci_dev *pdev)
}
pci_write_config_word(pdev, cap + PCI_EXP_DPC_STATUS,
- PCI_EXP_DPC_STATUS_TRIGGER | PCI_EXP_DPC_STATUS_INTERRUPT);
+ PCI_EXP_DPC_STATUS_TRIGGER);
pci_read_config_word(pdev, cap + PCI_EXP_DPC_CTL, &ctl);
pci_write_config_word(pdev, cap + PCI_EXP_DPC_CTL,
@@ -225,6 +225,9 @@ static irqreturn_t dpc_irq(int irq, void *context)
if (dpc->rp_extensions && reason == 3 && ext_reason == 0)
dpc_process_rp_pio_error(dpc);
+ pci_write_config_word(pdev, cap + PCI_EXP_DPC_STATUS,
+ PCI_EXP_DPC_STATUS_INTERRUPT);
+
schedule_work(&dpc->work);
return IRQ_HANDLED;