Index: drivers/pci/probe.c =================================================================== --- drivers/pci/probe.c (revision 102) +++ drivers/pci/probe.c (revision 103) @@ -996,11 +996,21 @@ struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn) { struct pci_dev *dev; + struct list_head *ln; dev = pci_scan_device(bus, devfn); if (!dev) return NULL; + /* refuse to re-add a device */ + list_for_each(ln, &bus->devices) { + struct pci_dev *d = pci_dev_b(ln); + if ((d->vendor == dev->vendor) && + (d->device == dev->device) && + (d->devfn == dev->devfn)) + return NULL; + } + pci_device_add(dev, bus); return dev;