Subject: ACPI : Unneccessary to scan the PCI bus already scanned. >From : Zhao Yakui <yakui.zhao@xxxxxxxxx> Maybe the desired pci bus has been already scanned. In such case it is unnecessary to scan the pci bus with the given domain, busnum. http://bugzilla.kernel.org/show_bug.cgi?id=10124 Signed-off-by: Zhao Yakui <yakui.zhao@xxxxxxxxx> Signed-off-by: Li Shaohua <shaohua.li@xxxxxxxxx> --- arch/ia64/pci/pci.c | 7 ++++++- arch/x86/pci/acpi.c | 17 +++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) Index: linux-2.6/arch/x86/pci/acpi.c =================================================================== --- linux-2.6.orig/arch/x86/pci/acpi.c +++ linux-2.6/arch/x86/pci/acpi.c @@ -219,8 +219,21 @@ struct pci_bus * __devinit pci_acpi_scan if (pxm >= 0) sd->node = pxm_to_node(pxm); #endif + /* + * Maybe the desired pci bus has been already scanned. In such case + * it is unnecessary to scan the pci bus with the given domain,busnum. + */ + bus = pci_find_bus(domain, busnum); + if (bus) { + /* + * If the desired bus exits, the content of bus->sysdata will + * be replaced by sd. + */ + memcpy(bus->sysdata, sd, sizeof(*sd)); + kfree(sd); + } else + bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd); - bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd); if (!bus) kfree(sd); @@ -228,7 +241,7 @@ struct pci_bus * __devinit pci_acpi_scan if (bus != NULL) { if (pxm >= 0) { printk("bus %d -> pxm %d -> node %d\n", - busnum, pxm, sd->node); + busnum, pxm, pxm_to_node(pxm)); } } #endif Index: linux-2.6/arch/ia64/pci/pci.c =================================================================== --- linux-2.6.orig/arch/ia64/pci/pci.c +++ linux-2.6/arch/ia64/pci/pci.c @@ -362,7 +362,12 @@ pci_acpi_scan_root(struct acpi_device *d info.name = name; acpi_walk_resources(device->handle, METHOD_NAME__CRS, add_window, &info); - + /* + * See arch/x86/pci/acpi.c. + * The desired pci bus might already be scanned in a quirk. We + * should handle the case here, but it appears that IA64 hasn't + * such quirk. So we just ignore the case now. + */ pbus = pci_scan_bus_parented(NULL, bus, &pci_root_ops, controller); if (pbus) pcibios_setup_root_windows(pbus, controller); -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html