* Trent Piepho <xyzzy@xxxxxxxxxxxxx>: > This patch adds an attribute named "remove" to a PCI device's sysfs > directory. Writing a non-zero value to this attribute will remove the PCI > device and any children of it. > --- > Documentation/filesystems/sysfs-pci.txt | 9 +++++++++ > drivers/pci/pci-sysfs.c | 26 ++++++++++++++++++++++++++ > 2 files changed, 35 insertions(+), 0 deletions(-) I've fold this almost verbatim into my patch series, changing the patch title, adding ABI documentation, and protecting the remove calls with #ifdef CONFIG_HOTPLUG: Otherwise, it's untouched. Author: Trent Piepho <xyzzy@xxxxxxxxxxxxx> Date: Tue Feb 10 15:02:54 2009 -0700 PCI: Introduce /sys/bus/pci/devices/.../remove This patch adds an attribute named "remove" to a PCI device's sysfs directory. Writing a non-zero value to this attribute will remove the PCI device and any children of it. [achiang@xxxxxx: document in Documentation/ABI] [achiang@xxxxxx: add #ifdef CONFIG_HOTPLUG] Cc: djwong@xxxxxxxxxx Signed-off-by: Trent Piepho <xyzzy@xxxxxxxxxxxxx> Signed-off-by: Alex Chiang <achiang@xxxxxx> Thanks. /ac > diff --git a/Documentation/filesystems/sysfs-pci.txt b/Documentation/filesystems/sysfs-pci.txt > index 68ef488..54e014f 100644 > --- a/Documentation/filesystems/sysfs-pci.txt > +++ b/Documentation/filesystems/sysfs-pci.txt > @@ -11,6 +11,7 @@ that support it. For example, a given bus might look like this: > | |-- device > | |-- irq > | |-- local_cpus > + | |-- remove > | |-- resource > | |-- resource0 > | |-- resource1 > @@ -34,6 +35,7 @@ files, each with their own function. > device PCI device (ascii, ro) > irq IRQ number (ascii, ro) > local_cpus nearby CPU mask (cpumask, ro) > + remove remove device from kernel's list (ascii, wo) > resource PCI resource host addresses (ascii, ro) > resource0..N PCI resource N, if present (binary, mmap) > resource0_wc..N_wc PCI WC map resource N, if prefetchable (binary, mmap) > @@ -44,6 +46,7 @@ files, each with their own function. > > ro - read only file > rw - file is readable and writable > + wo - write only file > mmap - file is mmapable > ascii - file contains ascii text > binary - file contains binary data > @@ -62,6 +65,12 @@ ROM file, if available. It's disabled by default, however, so applications > should write the string "1" to the file to enable it before attempting a read > call, and disable it following the access by writing "0" to the file. > > +The 'remove' file is used to remove the PCI device, by writing a non-zero > +integer to the file. This does not involve any kind of hot-plug functionality, > +e.g. powering off the device. The device is removed from the kernel's list of > +PCI devices, the sysfs directory for it removed, and the device will be removed > +from any drivers attached to it. > + > Accessing legacy resources through sysfs > ---------------------------------------- > > diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c > index 3ddee7f..d422f37 100644 > --- a/drivers/pci/pci-sysfs.c > +++ b/drivers/pci/pci-sysfs.c > @@ -219,6 +219,31 @@ msi_bus_store(struct device *dev, struct device_attribute *attr, > return count; > } > > +static void remove_callback(void *data) > +{ > + pci_remove_bus_device((struct pci_dev *)data); > +} > + > +static ssize_t > +remove_store(struct device *dev, struct device_attribute *dummy, > + const char *buf, size_t count) > +{ > + struct pci_dev *pdev = to_pci_dev(dev); > + unsigned long val; > + > + if (strict_strtoul(buf, 0, &val) < 0) > + return -EINVAL; > + > + if (!capable(CAP_SYS_ADMIN)) > + return -EPERM; > + > + if (val) > + sysfs_schedule_callback(&dev->kobj, remove_callback, pdev, > + THIS_MODULE); > + > + return count; > +} > + > struct device_attribute pci_dev_attrs[] = { > __ATTR_RO(resource), > __ATTR_RO(vendor), > @@ -237,6 +262,7 @@ struct device_attribute pci_dev_attrs[] = { > __ATTR(broken_parity_status,(S_IRUGO|S_IWUSR), > broken_parity_status_show,broken_parity_status_store), > __ATTR(msi_bus, 0644, msi_bus_show, msi_bus_store), > + __ATTR(remove, S_IWUSR, NULL, remove_store), > __ATTR_NULL, > }; > > -- > 1.5.4.3 > -- 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