struct acpiphp_func *func;
        int max, pass;
        LIST_HEAD(add_list);
+       int nr_found;
 
        list_for_each_entry(func, &slot->funcs, sibling)
                acpiphp_bus_add(func_to_handle(func));
 
-       pci_scan_slot(bus, PCI_DEVFN(slot->device, 0));
-
+       nr_found = pci_scan_slot(bus, PCI_DEVFN(slot->device, 0));
        max = acpiphp_max_busnr(bus);
        for (pass = 0; pass < 2; pass++) {
                list_for_each_entry(dev, &bus->devices, bus_list) {
                        }
                }
        }
-
        __pci_bus_assign_resources(bus, &add_list, NULL);
+       /* Nothing more to do here if there are no new devices on this bus. */
+       if (!nr_found && (slot->flags & SLOT_ENABLED))
+               return;
+
        acpiphp_sanitize_bus(bus);
        acpiphp_set_hpp_values(bus);
        acpiphp_set_acpi_region(slot);