tiejun.chen wrote: > Since this patch would involve commit cc57450f, so post this to this commit > author as well. > > Anyway, I will appreciate any suggestion. > Any feedback? Thanks Tiejun > 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