aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/pci_root.c
diff options
context:
space:
mode:
authorRui Wang <rui.y.wang@intel.com>2017-02-28 08:34:29 -0500
committerThomas Gleixner <tglx@linutronix.de>2017-03-01 04:51:41 -0500
commitf2ae5da726172fcf82f7be801489dd585f6a38eb (patch)
tree35a6ee0f1d018f201f3ab0c145c1fc61d84b49ec /drivers/acpi/pci_root.c
parent153654dbe595a68845ba14d5b0bfe299fa6a7e99 (diff)
x86/ioapic: Split IOAPIC hot-removal into two steps
The hot removal of IOAPIC is handling PCI and ACPI removal in one go. That only works when the PCI drivers released the interrupt resources, but breaks when a IOAPIC interrupt is still associated to a PCI device. The new pcibios_release_device() callback allows to solve that problem by splitting the removal into two steps: 1) PCI removal: Release all PCI resources including eventually not yet released IOAPIC interrupts via the new pcibios_release_device() callback. 2) ACPI removal: After release of all PCI resources the ACPI resources can be released without issue. [ tglx: Rewrote changelog ] Signed-off-by: Rui Wang <rui.y.wang@intel.com> Cc: tony.luck@intel.com Cc: linux-pci@vger.kernel.org Cc: rjw@rjwysocki.net Cc: linux-acpi@vger.kernel.org Cc: fengguang.wu@intel.com Cc: helgaas@kernel.org Cc: kbuild-all@01.org Cc: bhelgaas@google.com Link: http://lkml.kernel.org/r/1488288869-31290-3-git-send-email-rui.y.wang@intel.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers/acpi/pci_root.c')
-rw-r--r--drivers/acpi/pci_root.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index bf601d4df8cf..919be0aa2578 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -648,12 +648,12 @@ static void acpi_pci_root_remove(struct acpi_device *device)
648 648
649 pci_stop_root_bus(root->bus); 649 pci_stop_root_bus(root->bus);
650 650
651 WARN_ON(acpi_ioapic_remove(root)); 651 pci_ioapic_remove(root);
652
653 device_set_run_wake(root->bus->bridge, false); 652 device_set_run_wake(root->bus->bridge, false);
654 pci_acpi_remove_bus_pm_notifier(device); 653 pci_acpi_remove_bus_pm_notifier(device);
655 654
656 pci_remove_root_bus(root->bus); 655 pci_remove_root_bus(root->bus);
656 WARN_ON(acpi_ioapic_remove(root));
657 657
658 dmar_device_remove(device->handle); 658 dmar_device_remove(device->handle);
659 659