diff options
Diffstat (limited to 'drivers/pci/hotplug/pciehp_hpc.c')
| -rw-r--r-- | drivers/pci/hotplug/pciehp_hpc.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 9da84b8b27d8..5e01ae39ec46 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c | |||
| @@ -506,6 +506,8 @@ static irqreturn_t pcie_isr(int irq, void *dev_id) | |||
| 506 | { | 506 | { |
| 507 | struct controller *ctrl = (struct controller *)dev_id; | 507 | struct controller *ctrl = (struct controller *)dev_id; |
| 508 | struct pci_dev *pdev = ctrl_dev(ctrl); | 508 | struct pci_dev *pdev = ctrl_dev(ctrl); |
| 509 | struct pci_bus *subordinate = pdev->subordinate; | ||
| 510 | struct pci_dev *dev; | ||
| 509 | struct slot *slot = ctrl->slot; | 511 | struct slot *slot = ctrl->slot; |
| 510 | u16 detected, intr_loc; | 512 | u16 detected, intr_loc; |
| 511 | 513 | ||
| @@ -539,6 +541,16 @@ static irqreturn_t pcie_isr(int irq, void *dev_id) | |||
| 539 | wake_up(&ctrl->queue); | 541 | wake_up(&ctrl->queue); |
| 540 | } | 542 | } |
| 541 | 543 | ||
| 544 | if (subordinate) { | ||
| 545 | list_for_each_entry(dev, &subordinate->devices, bus_list) { | ||
| 546 | if (dev->ignore_hotplug) { | ||
| 547 | ctrl_dbg(ctrl, "ignoring hotplug event %#06x (%s requested no hotplug)\n", | ||
| 548 | intr_loc, pci_name(dev)); | ||
| 549 | return IRQ_HANDLED; | ||
| 550 | } | ||
| 551 | } | ||
| 552 | } | ||
| 553 | |||
| 542 | if (!(intr_loc & ~PCI_EXP_SLTSTA_CC)) | 554 | if (!(intr_loc & ~PCI_EXP_SLTSTA_CC)) |
| 543 | return IRQ_HANDLED; | 555 | return IRQ_HANDLED; |
| 544 | 556 | ||
