aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/pci
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/pci')
-rw-r--r--arch/x86/pci/acpi.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
index 0234f2831bf3..378136fb5044 100644
--- a/arch/x86/pci/acpi.c
+++ b/arch/x86/pci/acpi.c
@@ -219,8 +219,21 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do
219 if (pxm >= 0) 219 if (pxm >= 0)
220 sd->node = pxm_to_node(pxm); 220 sd->node = pxm_to_node(pxm);
221#endif 221#endif
222 /*
223 * Maybe the desired pci bus has been already scanned. In such case
224 * it is unnecessary to scan the pci bus with the given domain,busnum.
225 */
226 bus = pci_find_bus(domain, busnum);
227 if (bus) {
228 /*
229 * If the desired bus exits, the content of bus->sysdata will
230 * be replaced by sd.
231 */
232 memcpy(bus->sysdata, sd, sizeof(*sd));
233 kfree(sd);
234 } else
235 bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd);
222 236
223 bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd);
224 if (!bus) 237 if (!bus)
225 kfree(sd); 238 kfree(sd);
226 239
@@ -228,7 +241,7 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do
228 if (bus != NULL) { 241 if (bus != NULL) {
229 if (pxm >= 0) { 242 if (pxm >= 0) {
230 printk("bus %d -> pxm %d -> node %d\n", 243 printk("bus %d -> pxm %d -> node %d\n",
231 busnum, pxm, sd->node); 244 busnum, pxm, pxm_to_node(pxm));
232 } 245 }
233 } 246 }
234#endif 247#endif