Since this patch would involve commit cc57450f, so post this to this commit author as well. Anyway, I will appreciate any suggestion. Thanks Tiejun Tiejun Chen wrote: > When hot-plugging a root bridge, we always prevent assigning a bus number > that already exists. This makes sure we don't step over an existing bus. > But sometimes we only remove PCI device in PCI hieratchy of OS, i,e. > > echo 1 > /sys/bus/pci/devices/.../remove > > but actually don't hotplug this device out the platform, so in this case > we still should re-scan this bus to enumerate this device when re-scanning > PCI again. > > Signed-off-by: Tiejun Chen <tiejun.chen@xxxxxxxxxxxxx> > --- > drivers/pci/probe.c | 14 ++++++++------ > 1 files changed, 8 insertions(+), 6 deletions(-) > > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c > index 48849ff..515824e 100644 > --- a/drivers/pci/probe.c > +++ b/drivers/pci/probe.c > @@ -724,12 +724,14 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, > pci_write_config_word(dev, PCI_STATUS, 0xffff); > > /* Prevent assigning a bus number that already exists. > - * This can happen when a bridge is hot-plugged */ > - if (pci_find_bus(pci_domain_nr(bus), max+1)) > - goto out; > - child = pci_add_new_bus(bus, dev, ++max); > - if (!child) > - goto out; > + * This can happen when a bridge is hot-plugged, so in > + * this case we only re-scan this bus. */ > + child = pci_find_bus(pci_domain_nr(bus), max+1); > + if (!child) { > + child = pci_add_new_bus(bus, dev, ++max); > + if (!child) > + goto out; > + } > buses = (buses & 0xff000000) > | ((unsigned int)(child->primary) << 0) > | ((unsigned int)(child->secondary) << 8) -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html