summaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci-acpi.c
diff options
context:
space:
mode:
authorJiang Liu <liuj97@gmail.com>2013-04-12 05:44:26 +0000
committerBjorn Helgaas <bhelgaas@google.com>2013-04-12 16:52:01 -0600
commit3b63aaa70e1ccc4b66d60acc78da09700706a703 (patch)
tree6255864d51d65ab0d833e197a9ef9080d83a68de /drivers/pci/pci-acpi.c
parent6037a803b05eef9943fb64982e19964007fb7478 (diff)
downloadlinux-3b63aaa70e1ccc4b66d60acc78da09700706a703.tar.gz
linux-3b63aaa70e1ccc4b66d60acc78da09700706a703.tar.bz2
linux-3b63aaa70e1ccc4b66d60acc78da09700706a703.zip
PCI: acpiphp: Do not use ACPI PCI subdriver mechanism
Previously the acpiphp driver registered itself as an ACPI PCI subdriver, so its callbacks were invoked when creating/destroying PCI root buses to manage ACPI-based PCI hotplug slots. But it doesn't handle P2P bridge hotplug events, so it will cause strange behaviour if there are hotplug slots associated with a hot-removed P2P bridge. This patch fixes this issue by: 1) Directly hooking into PCI core to update hotplug slot devices when creating/destroying PCI buses through: pci_{add|remove}_bus() -> acpi_pci_{add|remove}_bus() 2) Getting rid of unused ACPI PCI subdriver-related code It also cleans up unused code in the acpiphp driver. [bhelgaas: keep acpi_pci_add_bus() stub for CONFIG_ACPI=n] Signed-off-by: Jiang Liu <jiang.liu@huawei.com> Signed-off-by: Yijing Wang <wangyijing@huawei.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Yinghai Lu <yinghai@kernel.org> Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com> Cc: Toshi Kani <toshi.kani@hp.com>
Diffstat (limited to 'drivers/pci/pci-acpi.c')
-rw-r--r--drivers/pci/pci-acpi.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 98e582a2c909..d927933dcf44 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -297,6 +297,7 @@ void acpi_pci_add_bus(struct pci_bus *bus)
return;
acpi_pci_slot_enumerate(bus, handle);
+ acpiphp_enumerate_slots(bus, handle);
}
void acpi_pci_remove_bus(struct pci_bus *bus)
@@ -308,6 +309,7 @@ void acpi_pci_remove_bus(struct pci_bus *bus)
if (acpi_pci_disabled)
return;
+ acpiphp_remove_slots(bus);
acpi_pci_slot_remove(bus);
}
@@ -388,6 +390,7 @@ static int __init acpi_pci_init(void)
pci_set_platform_pm(&acpi_pci_platform_pm);
acpi_pci_slot_init();
+ acpiphp_init();
return 0;
}