x86/PCI: merge pcibios_scan_root() and pci_scan_bus_on_node()
authorYinghai Lu <yinghai@kernel.org>
Tue, 3 Apr 2012 01:31:54 +0000 (18:31 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Mon, 30 Apr 2012 20:52:43 +0000 (14:52 -0600)
pcibios_scan_root() and pci_scan_bus_on_node() were almost identical,
so this patch merges them.

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

index 323481e06ef8cfa3f8aefa47d9b763a08f4aab92..8e04ec5915437890ecf56550cebfb8828051a9ed 100644 (file)
@@ -430,9 +430,7 @@ void __init dmi_check_pciprobe(void)
 
 struct pci_bus * __devinit pcibios_scan_root(int busnum)
 {
-       LIST_HEAD(resources);
        struct pci_bus *bus = NULL;
-       struct pci_sysdata *sd;
 
        while ((bus = pci_find_next_bus(bus)) != NULL) {
                if (bus->number == busnum) {
@@ -441,28 +439,10 @@ struct pci_bus * __devinit pcibios_scan_root(int busnum)
                }
        }
 
-       /* Allocate per-root-bus (not per bus) arch-specific data.
-        * TODO: leak; this memory is never freed.
-        * It's arguable whether it's worth the trouble to care.
-        */
-       sd = kzalloc(sizeof(*sd), GFP_KERNEL);
-       if (!sd) {
-               printk(KERN_ERR "PCI: OOM, not probing PCI bus %02x\n", busnum);
-               return NULL;
-       }
-
-       sd->node = get_mp_bus_to_node(busnum);
-
-       printk(KERN_DEBUG "PCI: Probing PCI hardware (bus %02x)\n", busnum);
-       x86_pci_root_bus_resources(busnum, &resources);
-       bus = pci_scan_root_bus(NULL, busnum, &pci_root_ops, sd, &resources);
-       if (!bus) {
-               pci_free_resource_list(&resources);
-               kfree(sd);
-       }
-
-       return bus;
+       return pci_scan_bus_on_node(busnum, &pci_root_ops,
+                                       get_mp_bus_to_node(busnum));
 }
+
 void __init pcibios_set_cache_line_size(void)
 {
        struct cpuinfo_x86 *c = &boot_cpu_data;
@@ -656,6 +636,7 @@ struct pci_bus * __devinit pci_scan_bus_on_node(int busno, struct pci_ops *ops,
        }
        sd->node = node;
        x86_pci_root_bus_resources(busno, &resources);
+       printk(KERN_DEBUG "PCI: Probing PCI hardware (bus %02x)\n", busno);
        bus = pci_scan_root_bus(NULL, busno, ops, sd, &resources);
        if (!bus) {
                pci_free_resource_list(&resources);