x86/PCI: use _CRS bus number aperture for host bridges from ACPI
authorYinghai Lu <yinghai@kernel.org>
Fri, 18 May 2012 01:51:12 +0000 (18:51 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 13 Jun 2012 21:42:23 +0000 (15:42 -0600)
Add the host bridge bus number aperture from _CRS to the resource list.
Like the MMIO and I/O port apertures, this will be used when assigning
resources to hot-added devices or in the case of conflicts.

Note that we always use the _CRS bus number aperture, even if we're
ignoring _CRS otherwise.

[bhelgaas: changelog]
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
arch/x86/pci/acpi.c

index 350fe63..2bb885a 100644 (file)
@@ -12,7 +12,6 @@ struct pci_root_info {
        char name[16];
        unsigned int res_num;
        struct resource *res;
-       int busnum;
        struct pci_sysdata sd;
 };
 
@@ -347,7 +346,9 @@ probe_pci_root_info(struct pci_root_info *info, struct acpi_device *device,
 {
        size_t size;
 
+       sprintf(info->name, "PCI Bus %04x:%02x", domain, busnum);
        info->bridge = device;
+
        info->res_num = 0;
        acpi_walk_resources(device->handle, METHOD_NAME__CRS, count_resource,
                                info);
@@ -360,8 +361,6 @@ probe_pci_root_info(struct pci_root_info *info, struct acpi_device *device,
        if (!info->res)
                return;
 
-       sprintf(info->name, "PCI Bus %04x:%02x", domain, busnum);
-
        acpi_walk_resources(device->handle, METHOD_NAME__CRS, setup_resource,
                                info);
 }
@@ -426,6 +425,8 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_pci_root *root)
        } else {
                probe_pci_root_info(info, device, busnum, domain);
 
+               /* insert busn res at first */
+               pci_add_resource(&resources,  &root->secondary);
                /*
                 * _CRS with no apertures is normal, so only fall back to
                 * defaults or native bridge info if we're ignoring _CRS.
@@ -440,7 +441,7 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_pci_root *root)
                bus = pci_create_root_bus(NULL, busnum, &pci_root_ops, sd,
                                          &resources);
                if (bus) {
-                       bus->busn_res.end = pci_scan_child_bus(bus);
+                       pci_scan_child_bus(bus);
                        pci_set_host_bridge_release(
                                to_pci_host_bridge(bus->bridge),
                                release_pci_root_info, info);