drivers/pci/probe.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index b1724cf..e3c3ee0 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -1002,11 +1002,21 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus) 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;