diff options
author | Jiang Liu <liuj97@gmail.com> | 2013-04-12 01:44:26 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2013-04-12 18:52:01 -0400 |
commit | 3b63aaa70e1ccc4b66d60acc78da09700706a703 (patch) | |
tree | 6255864d51d65ab0d833e197a9ef9080d83a68de /drivers/pci/hotplug/acpiphp.h | |
parent | 6037a803b05eef9943fb64982e19964007fb7478 (diff) |
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/hotplug/acpiphp.h')
-rw-r--r-- | drivers/pci/hotplug/acpiphp.h | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/drivers/pci/hotplug/acpiphp.h b/drivers/pci/hotplug/acpiphp.h index b06ae681d5b7..abd48d309ad0 100644 --- a/drivers/pci/hotplug/acpiphp.h +++ b/drivers/pci/hotplug/acpiphp.h | |||
@@ -119,7 +119,6 @@ struct acpiphp_slot { | |||
119 | */ | 119 | */ |
120 | struct acpiphp_func { | 120 | struct acpiphp_func { |
121 | struct acpiphp_slot *slot; /* parent */ | 121 | struct acpiphp_slot *slot; /* parent */ |
122 | struct acpiphp_bridge *bridge; /* Ejectable PCI-to-PCI bridge */ | ||
123 | 122 | ||
124 | struct list_head sibling; | 123 | struct list_head sibling; |
125 | struct notifier_block nb; | 124 | struct notifier_block nb; |
@@ -176,8 +175,6 @@ extern int acpiphp_register_hotplug_slot(struct acpiphp_slot *slot); | |||
176 | extern void acpiphp_unregister_hotplug_slot(struct acpiphp_slot *slot); | 175 | extern void acpiphp_unregister_hotplug_slot(struct acpiphp_slot *slot); |
177 | 176 | ||
178 | /* acpiphp_glue.c */ | 177 | /* acpiphp_glue.c */ |
179 | extern int acpiphp_glue_init (void); | ||
180 | extern void acpiphp_glue_exit (void); | ||
181 | typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data); | 178 | typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data); |
182 | 179 | ||
183 | extern int acpiphp_enable_slot (struct acpiphp_slot *slot); | 180 | extern int acpiphp_enable_slot (struct acpiphp_slot *slot); |