If the PCI core knows the entire subordinate bus range (not just the root bus number), it can restrict enumeration to just those buses. If we enumerate devices under the wrong host bridge, we'll use the wrong resources for those devices. Reference: https://bugzilla.novell.com/show_bug.cgi?id=735909 Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> --- arch/x86/pci/acpi.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c index a312e76..0a45d1c 100644 --- a/arch/x86/pci/acpi.c +++ b/arch/x86/pci/acpi.c @@ -349,6 +349,7 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_pci_root *root) int domain = root->segment; int busnum = root->secondary.start; LIST_HEAD(resources); + struct pci_host_bridge *bridge; struct pci_bus *bus; struct pci_sysdata *sd; int node; @@ -406,8 +407,9 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_pci_root *root) get_current_resources(device, busnum, domain, &resources); if (list_empty(&resources)) x86_pci_root_bus_resources(busnum, &resources); - bus = pci_create_root_bus(NULL, busnum, &pci_root_ops, sd, - &resources); + bridge = pci_create_host_bridge(NULL, domain, &root->secondary, + &resources, &pci_root_ops, sd); + bus = bridge ? bridge->bus : NULL; if (bus) bus->subordinate = pci_scan_child_bus(bus); else -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html