From: Kenji Kaneshige Date: Mon, 27 Feb 2006 13:15:49 +0000 (+0900) Subject: [PATCH] acpiphp: Scan slots under the nested P2P bridge X-Git-Tag: v2.6.17-rc1~998^2~4 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c8f25da12a3dda46fb730699582895d5fc51287;p=linux-2.6 [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 Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index 21fa13e844..cbd5893d19 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) add_p2p_bridge(handle, dev); } + /* search P2P bridges under this p2p bridge */ + status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1, + find_p2p_bridge, dev->subordinate, NULL); + if (ACPI_FAILURE(status)) + warn("find_p2p_bridge faied (error code = 0x%x)\n", status); + out: pci_dev_put(dev); return AE_OK; @@ -603,7 +609,8 @@ static void remove_bridge(acpi_handle handle) } else { /* clean-up p2p bridges under this host bridge */ acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, - (u32)1, cleanup_p2p_bridge, NULL, NULL); + ACPI_UINT32_MAX, cleanup_p2p_bridge, + NULL, NULL); } }