PCI/sysfs: move bus cpuaffinity to class dev_attrs
authorYinghai Lu <yinghai@kernel.org>
Fri, 13 May 2011 00:11:40 +0000 (17:11 -0700)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Sat, 21 May 2011 19:17:13 +0000 (12:17 -0700)
Requested by Greg KH to fix a race condition in the creating of PCI bus
cpuaffinity files.

Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/bus.c
drivers/pci/pci-sysfs.c
drivers/pci/pci.h
drivers/pci/probe.c
drivers/pci/remove.c

index 69546e9..1e2ad92 100644 (file)
@@ -163,12 +163,6 @@ int pci_bus_add_child(struct pci_bus *bus)
 
        bus->is_added = 1;
 
-       retval = device_create_file(&bus->dev, &dev_attr_cpuaffinity);
-       if (retval)
-               return retval;
-
-       retval = device_create_file(&bus->dev, &dev_attr_cpulistaffinity);
-
        /* Create legacy_io and legacy_mem files for this bus */
        pci_create_legacy_files(bus);
 
index c690abc..7bcf12a 100644 (file)
@@ -108,6 +108,40 @@ static ssize_t local_cpulist_show(struct device *dev,
        return len;
 }
 
+/*
+ * PCI Bus Class Devices
+ */
+static ssize_t pci_bus_show_cpuaffinity(struct device *dev,
+                                       int type,
+                                       struct device_attribute *attr,
+                                       char *buf)
+{
+       int ret;
+       const struct cpumask *cpumask;
+
+       cpumask = cpumask_of_pcibus(to_pci_bus(dev));
+       ret = type ?
+               cpulist_scnprintf(buf, PAGE_SIZE-2, cpumask) :
+               cpumask_scnprintf(buf, PAGE_SIZE-2, cpumask);
+       buf[ret++] = '\n';
+       buf[ret] = '\0';
+       return ret;
+}
+
+static inline ssize_t pci_bus_show_cpumaskaffinity(struct device *dev,
+                                       struct device_attribute *attr,
+                                       char *buf)
+{
+       return pci_bus_show_cpuaffinity(dev, 0, attr, buf);
+}
+
+static inline ssize_t pci_bus_show_cpulistaffinity(struct device *dev,
+                                       struct device_attribute *attr,
+                                       char *buf)
+{
+       return pci_bus_show_cpuaffinity(dev, 1, attr, buf);
+}
+
 /* show resources */
 static ssize_t
 resource_show(struct device * dev, struct device_attribute *attr, char * buf)
@@ -370,6 +404,8 @@ struct device_attribute pcibus_dev_attrs[] = {
 #ifdef CONFIG_HOTPLUG
        __ATTR(rescan, (S_IWUSR|S_IWGRP), NULL, dev_bus_rescan_store),
 #endif
+       __ATTR(cpuaffinity, S_IRUGO, pci_bus_show_cpumaskaffinity, NULL),
+       __ATTR(cpulistaffinity, S_IRUGO, pci_bus_show_cpulistaffinity, NULL),
        __ATTR_NULL,
 };
 
index dcf640a..4ee9e8a 100644 (file)
@@ -157,8 +157,6 @@ static inline int pci_no_d1d2(struct pci_dev *dev)
 }
 extern struct device_attribute pci_dev_attrs[];
 extern struct device_attribute pcibus_dev_attrs[];
-extern struct device_attribute dev_attr_cpuaffinity;
-extern struct device_attribute dev_attr_cpulistaffinity;
 #ifdef CONFIG_HOTPLUG
 extern struct bus_attribute pci_bus_attrs[];
 #else
index c471295..48849ff 100644 (file)
@@ -43,43 +43,6 @@ int no_pci_devices(void)
 EXPORT_SYMBOL(no_pci_devices);
 
 /*
- * PCI Bus Class Devices
- */
-static ssize_t pci_bus_show_cpuaffinity(struct device *dev,
-                                       int type,
-                                       struct device_attribute *attr,
-                                       char *buf)
-{
-       int ret;
-       const struct cpumask *cpumask;
-
-       cpumask = cpumask_of_pcibus(to_pci_bus(dev));
-       ret = type?
-               cpulist_scnprintf(buf, PAGE_SIZE-2, cpumask) :
-               cpumask_scnprintf(buf, PAGE_SIZE-2, cpumask);
-       buf[ret++] = '\n';
-       buf[ret] = '\0';
-       return ret;
-}
-
-static ssize_t inline pci_bus_show_cpumaskaffinity(struct device *dev,
-                                       struct device_attribute *attr,
-                                       char *buf)
-{
-       return pci_bus_show_cpuaffinity(dev, 0, attr, buf);
-}
-
-static ssize_t inline pci_bus_show_cpulistaffinity(struct device *dev,
-                                       struct device_attribute *attr,
-                                       char *buf)
-{
-       return pci_bus_show_cpuaffinity(dev, 1, attr, buf);
-}
-
-DEVICE_ATTR(cpuaffinity,     S_IRUGO, pci_bus_show_cpumaskaffinity, NULL);
-DEVICE_ATTR(cpulistaffinity, S_IRUGO, pci_bus_show_cpulistaffinity, NULL);
-
-/*
  * PCI Bus Class
  */
 static void release_pcibus_dev(struct device *dev)
@@ -1456,9 +1419,6 @@ struct pci_bus * pci_create_bus(struct device *parent,
        error = device_register(&b->dev);
        if (error)
                goto class_dev_reg_err;
-       error = device_create_file(&b->dev, &dev_attr_cpuaffinity);
-       if (error)
-               goto dev_create_file_err;
 
        /* Create legacy_io and legacy_mem files for this bus */
        pci_create_legacy_files(b);
@@ -1469,8 +1429,6 @@ struct pci_bus * pci_create_bus(struct device *parent,
 
        return b;
 
-dev_create_file_err:
-       device_unregister(&b->dev);
 class_dev_reg_err:
        device_unregister(dev);
 dev_reg_err:
index 176615e..7f87bee 100644 (file)
@@ -73,8 +73,6 @@ void pci_remove_bus(struct pci_bus *pci_bus)
                return;
 
        pci_remove_legacy_files(pci_bus);
-       device_remove_file(&pci_bus->dev, &dev_attr_cpuaffinity);
-       device_remove_file(&pci_bus->dev, &dev_attr_cpulistaffinity);
        device_unregister(&pci_bus->dev);
 }
 EXPORT_SYMBOL(pci_remove_bus);