diff options
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/pci-sysfs.c | 20 | ||||
-rw-r--r-- | drivers/pci/probe.c | 27 |
2 files changed, 41 insertions, 6 deletions
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index 8dcf1458aa2f..8d9d648daeba 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c | |||
@@ -73,8 +73,23 @@ static ssize_t local_cpus_show(struct device *dev, | |||
73 | 73 | ||
74 | mask = pcibus_to_cpumask(to_pci_dev(dev)->bus); | 74 | mask = pcibus_to_cpumask(to_pci_dev(dev)->bus); |
75 | len = cpumask_scnprintf(buf, PAGE_SIZE-2, mask); | 75 | len = cpumask_scnprintf(buf, PAGE_SIZE-2, mask); |
76 | strcat(buf,"\n"); | 76 | buf[len++] = '\n'; |
77 | return 1+len; | 77 | buf[len] = '\0'; |
78 | return len; | ||
79 | } | ||
80 | |||
81 | |||
82 | static ssize_t local_cpulist_show(struct device *dev, | ||
83 | struct device_attribute *attr, char *buf) | ||
84 | { | ||
85 | cpumask_t mask; | ||
86 | int len; | ||
87 | |||
88 | mask = pcibus_to_cpumask(to_pci_dev(dev)->bus); | ||
89 | len = cpulist_scnprintf(buf, PAGE_SIZE-2, mask); | ||
90 | buf[len++] = '\n'; | ||
91 | buf[len] = '\0'; | ||
92 | return len; | ||
78 | } | 93 | } |
79 | 94 | ||
80 | /* show resources */ | 95 | /* show resources */ |
@@ -201,6 +216,7 @@ struct device_attribute pci_dev_attrs[] = { | |||
201 | __ATTR_RO(class), | 216 | __ATTR_RO(class), |
202 | __ATTR_RO(irq), | 217 | __ATTR_RO(irq), |
203 | __ATTR_RO(local_cpus), | 218 | __ATTR_RO(local_cpus), |
219 | __ATTR_RO(local_cpulist), | ||
204 | __ATTR_RO(modalias), | 220 | __ATTR_RO(modalias), |
205 | #ifdef CONFIG_NUMA | 221 | #ifdef CONFIG_NUMA |
206 | __ATTR_RO(numa_node), | 222 | __ATTR_RO(numa_node), |
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 2db2e4bb0d1e..4b3011a23eff 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -82,6 +82,7 @@ void pci_remove_legacy_files(struct pci_bus *bus) { return; } | |||
82 | * PCI Bus Class Devices | 82 | * PCI Bus Class Devices |
83 | */ | 83 | */ |
84 | static ssize_t pci_bus_show_cpuaffinity(struct device *dev, | 84 | static ssize_t pci_bus_show_cpuaffinity(struct device *dev, |
85 | int type, | ||
85 | struct device_attribute *attr, | 86 | struct device_attribute *attr, |
86 | char *buf) | 87 | char *buf) |
87 | { | 88 | { |
@@ -89,12 +90,30 @@ static ssize_t pci_bus_show_cpuaffinity(struct device *dev, | |||
89 | cpumask_t cpumask; | 90 | cpumask_t cpumask; |
90 | 91 | ||
91 | cpumask = pcibus_to_cpumask(to_pci_bus(dev)); | 92 | cpumask = pcibus_to_cpumask(to_pci_bus(dev)); |
92 | ret = cpumask_scnprintf(buf, PAGE_SIZE, cpumask); | 93 | ret = type? |
93 | if (ret < PAGE_SIZE) | 94 | cpulist_scnprintf(buf, PAGE_SIZE-2, cpumask): |
94 | buf[ret++] = '\n'; | 95 | cpumask_scnprintf(buf, PAGE_SIZE-2, cpumask); |
96 | buf[ret++] = '\n'; | ||
97 | buf[ret] = '\0'; | ||
95 | return ret; | 98 | return ret; |
96 | } | 99 | } |
97 | DEVICE_ATTR(cpuaffinity, S_IRUGO, pci_bus_show_cpuaffinity, NULL); | 100 | |
101 | static ssize_t inline pci_bus_show_cpumaskaffinity(struct device *dev, | ||
102 | struct device_attribute *attr, | ||
103 | char *buf) | ||
104 | { | ||
105 | return pci_bus_show_cpuaffinity(dev, 0, attr, buf); | ||
106 | } | ||
107 | |||
108 | static ssize_t inline pci_bus_show_cpulistaffinity(struct device *dev, | ||
109 | struct device_attribute *attr, | ||
110 | char *buf) | ||
111 | { | ||
112 | return pci_bus_show_cpuaffinity(dev, 1, attr, buf); | ||
113 | } | ||
114 | |||
115 | DEVICE_ATTR(cpuaffinity, S_IRUGO, pci_bus_show_cpumaskaffinity, NULL); | ||
116 | DEVICE_ATTR(cpulistaffinity, S_IRUGO, pci_bus_show_cpulistaffinity, NULL); | ||
98 | 117 | ||
99 | /* | 118 | /* |
100 | * PCI Bus Class | 119 | * PCI Bus Class |