diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2014-09-15 13:18:36 -0600 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-09-15 13:18:36 -0600 |
commit | 6de8eee17a324a4fd8d1a4588a18e976b68f330c (patch) | |
tree | 153ab542d89e5905badb062d106b7739de5852d2 /drivers/pci/hotplug/pciehp_hpc.c | |
parent | fd7155fc9fca6464a5aa668965a3741b963f805f (diff) | |
parent | f91ce35e471ae17552ce7bfe355cfd997e3ad781 (diff) |
Merge branch 'pci/hotplug-vga' into for-linus
* pci/hotplug-vga:
ACPIPHP / radeon / nouveau: Remove acpi_bus_no_hotplug()
PCI: Add pci_ignore_hotplug() to ignore hotplug events for a device
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) { struct controller *ctrl = (struct controller *)dev_id; struct pci_dev *pdev = ctrl_dev(ctrl); + struct pci_bus *subordinate = pdev->subordinate; + struct pci_dev *dev; struct slot *slot = ctrl->slot; u16 detected, intr_loc; @@ -539,6 +541,16 @@ static irqreturn_t pcie_isr(int irq, void *dev_id) wake_up(&ctrl->queue); } + if (subordinate) { + list_for_each_entry(dev, &subordinate->devices, bus_list) { + if (dev->ignore_hotplug) { + ctrl_dbg(ctrl, "ignoring hotplug event %#06x (%s requested no hotplug)\n", + intr_loc, pci_name(dev)); + return IRQ_HANDLED; + } + } + } + if (!(intr_loc & ~PCI_EXP_SLTSTA_CC)) return IRQ_HANDLED; |