--- linus/include/linux/pci.h 2004-10-06 19:58:35.000000000 +0200 +++ pcirescan/include/linux/pci.h 2004-10-10 01:55:41.000000000 +0200 @@ -704,6 +704,7 @@ int pci_scan_slot(struct pci_bus *bus, int devfn); struct pci_dev * pci_scan_single_device(struct pci_bus *bus, int devfn); unsigned int pci_scan_child_bus(struct pci_bus *bus); +void pci_bus_add_device(struct pci_dev *dev); void pci_bus_add_devices(struct pci_bus *bus); void pci_name_device(struct pci_dev *dev); char *pci_class_name(u32 class); diff -ur linus/drivers/pci/bus.c pcirescan/drivers/pci/bus.c --- linus/drivers/pci/bus.c 2004-05-10 10:06:44.000000000 +0200 +++ pcirescan/drivers/pci/bus.c 2004-10-10 01:29:50.000000000 +0200 @@ -69,6 +69,20 @@ } /** + * add a single device + */ +void __devinit pci_bus_add_device(struct pci_dev *dev) { + device_add(&dev->dev); + + spin_lock(&pci_bus_lock); + list_add_tail(&dev->global_list, &pci_devices); + spin_unlock(&pci_bus_lock); + + pci_proc_attach_device(dev); + pci_create_sysfs_dev_files(dev); +} + +/** * pci_bus_add_devices - insert newly discovered PCI devices * @bus: bus to check for new devices * @@ -91,16 +105,7 @@ */ if (!list_empty(&dev->global_list)) continue; - - device_add(&dev->dev); - - spin_lock(&pci_bus_lock); - list_add_tail(&dev->global_list, &pci_devices); - spin_unlock(&pci_bus_lock); - - pci_proc_attach_device(dev); - pci_create_sysfs_dev_files(dev); - + pci_bus_add_device(dev); } list_for_each_entry(dev, &bus->devices, bus_list) { @@ -136,5 +141,6 @@ } EXPORT_SYMBOL(pci_bus_alloc_resource); +EXPORT_SYMBOL(pci_bus_add_device); EXPORT_SYMBOL(pci_bus_add_devices); EXPORT_SYMBOL(pci_enable_bridges);