On Tue, Mar 6, 2012 at 12:13 AM, Yinghai Lu <yinghai@xxxxxxxxxx> wrote: > > It will be used to rediscover removed pci root buses. > > Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx> > Cc: Randy Dunlap <rdunlap@xxxxxxxxxxxx> > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: linux-doc@xxxxxxxxxxxxxxx > --- > Documentation/ABI/testing/sysfs-bus-pci | 9 +++++++++ > drivers/pci/pci-sysfs.c | 21 +++++++++++++++++++++ > 2 files changed, 30 insertions(+), 0 deletions(-) > > diff --git a/Documentation/ABI/testing/sysfs-bus-pci > b/Documentation/ABI/testing/sysfs-bus-pci > index 22392de..eb826bd 100644 > --- a/Documentation/ABI/testing/sysfs-bus-pci > +++ b/Documentation/ABI/testing/sysfs-bus-pci > @@ -66,6 +66,15 @@ Description: > re-discover previously removed devices. > Depends on CONFIG_HOTPLUG. > > +What: /sys/bus/pci/rescan_root > +Date: March 2012 > +Contact: Linux PCI developers <linux-pci@xxxxxxxxxxxxxxx> > +Description: > + Writing a non-zero value to this attribute will > + cause a rescan of all PCI root buses in the system, and > + re-discover previously removed PCI root buses. This seems sort of backwards to me. Architecture-specific code enumerated the host bridges/root buses in the first place, not the PCI core. Now we're asking the PCI core (/sys/bus/pci) to re-enumerate them. But maybe it's still the right answer, I dunno. > + Depends on CONFIG_HOTPLUG. > + > What: /sys/bus/pci/devices/.../msi_irqs/ > Date: September, 2011 > Contact: Neil Horman <nhorman@xxxxxxxxxxxxx> > diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c > index f855b4b..d6221e5 100644 > --- a/drivers/pci/pci-sysfs.c > +++ b/drivers/pci/pci-sysfs.c > @@ -302,8 +302,29 @@ static ssize_t bus_rescan_store(struct bus_type *bus, > const char *buf, > return count; > } > > +void __weak acpi_pci_root_rescan(void) { } > +void __weak pcibios_root_rescan(void) { } > + > +static ssize_t bus_rescan_root_store(struct bus_type *bus, const char > *buf, > + size_t count) > +{ > + unsigned long val; > + > + if (strict_strtoul(buf, 0, &val) < 0) > + return -EINVAL; > + > + if (val) { > + mutex_lock(&pci_remove_rescan_mutex); > + acpi_pci_root_rescan(); This architecture-dependent function name should not be here. How will we make this work for powerpc, sparc, etc.? > + pcibios_root_rescan(); > + mutex_unlock(&pci_remove_rescan_mutex); > + } > + return count; > +} > + > struct bus_attribute pci_bus_attrs[] = { > __ATTR(rescan, (S_IWUSR|S_IWGRP), NULL, bus_rescan_store), > + __ATTR(rescan_root, (S_IWUSR|S_IWGRP), NULL, > bus_rescan_root_store), > __ATTR_NULL > }; > > -- > 1.7.7 > > -- > 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 -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html