aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>2006-02-27 08:15:49 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2006-03-23 17:35:16 -0500
commit7c8f25da12a3dda46fb730699582895d5fc51287 (patch)
treead56ba9fbbd688963cbefe541b77b8d3de21959f /drivers/pci
parent8e77af6a9a9b1eefdb538894b20ed41f65b65ab7 (diff)
[PATCH] acpiphp: Scan slots under the nested P2P bridge
Current ACPIPHP driver scans only slots under the top level PCI-to-PCI bridge. So hotplug PCI slots under the nested PCI-to-PCI bridge would not be detected. For example, if the system has the ACPI namespace like below, hotplug slots woule not be detected. Device (PCI0) { /* Root bridge */ Name (_HID, "PNP0A03") Device (P2PA) { /* PCI-to-PCI bridge */ Name (_ADR, ...) Device (P2PB) { /* PCI-to-PCI bridge */ Name (_ADR, ...) Device (S0F0) { /* hotplug slot */ Name (_ADR, ...) Name (_SUN, ...) Method (_EJ0, ...) { ... } } ... Device (S0F7) { /* hotplug slot */ Name (_ADR, ...) Name (_SUN, ...) Method (_EJ0, ...) { ... } } Device (S1F0) { /* hotplug slot */ Name (_ADR, ...) Name (_SUN, ...) Method (_EJ0, ...) { ... } } ... } } } This patch fixes this issue. Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/hotplug/acpiphp_glue.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index 21fa13e8447..cbd5893d198 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -463,6 +463,12 @@ find_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv)
463 add_p2p_bridge(handle, dev); 463 add_p2p_bridge(handle, dev);
464 } 464 }
465 465
466 /* search P2P bridges under this p2p bridge */
467 status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
468 find_p2p_bridge, dev->subordinate, NULL);
469 if (ACPI_FAILURE(status))
470 warn("find_p2p_bridge faied (error code = 0x%x)\n", status);
471
466 out: 472 out:
467 pci_dev_put(dev); 473 pci_dev_put(dev);
468 return AE_OK; 474 return AE_OK;
@@ -603,7 +609,8 @@ static void remove_bridge(acpi_handle handle)
603 } else { 609 } else {
604 /* clean-up p2p bridges under this host bridge */ 610 /* clean-up p2p bridges under this host bridge */
605 acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 611 acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
606 (u32)1, cleanup_p2p_bridge, NULL, NULL); 612 ACPI_UINT32_MAX, cleanup_p2p_bridge,
613 NULL, NULL);
607 } 614 }
608} 615}
609 616