aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci-sysfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/pci-sysfs.c')
-rw-r--r--drivers/pci/pci-sysfs.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index f8deb3e380a2..c690abc0e5b8 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -318,6 +318,25 @@ remove_store(struct device *dev, struct device_attribute *dummy,
318 count = ret; 318 count = ret;
319 return count; 319 return count;
320} 320}
321
322static ssize_t
323dev_bus_rescan_store(struct device *dev, struct device_attribute *attr,
324 const char *buf, size_t count)
325{
326 unsigned long val;
327 struct pci_bus *bus = to_pci_bus(dev);
328
329 if (strict_strtoul(buf, 0, &val) < 0)
330 return -EINVAL;
331
332 if (val) {
333 mutex_lock(&pci_remove_rescan_mutex);
334 pci_rescan_bus(bus);
335 mutex_unlock(&pci_remove_rescan_mutex);
336 }
337 return count;
338}
339
321#endif 340#endif
322 341
323struct device_attribute pci_dev_attrs[] = { 342struct device_attribute pci_dev_attrs[] = {
@@ -347,6 +366,13 @@ struct device_attribute pci_dev_attrs[] = {
347 __ATTR_NULL, 366 __ATTR_NULL,
348}; 367};
349 368
369struct device_attribute pcibus_dev_attrs[] = {
370#ifdef CONFIG_HOTPLUG
371 __ATTR(rescan, (S_IWUSR|S_IWGRP), NULL, dev_bus_rescan_store),
372#endif
373 __ATTR_NULL,
374};
375
350static ssize_t 376static ssize_t
351boot_vga_show(struct device *dev, struct device_attribute *attr, char *buf) 377boot_vga_show(struct device *dev, struct device_attribute *attr, char *buf)
352{ 378{