diff options
Diffstat (limited to 'drivers/base/node.c')
-rw-r--r-- | drivers/base/node.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/base/node.c b/drivers/base/node.c index 3855902f2c5b..aae2402f3791 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c | |||
@@ -27,13 +27,21 @@ static struct bus_type node_subsys = { | |||
27 | 27 | ||
28 | static ssize_t node_read_cpumap(struct device *dev, bool list, char *buf) | 28 | static ssize_t node_read_cpumap(struct device *dev, bool list, char *buf) |
29 | { | 29 | { |
30 | ssize_t n; | ||
31 | cpumask_var_t mask; | ||
30 | struct node *node_dev = to_node(dev); | 32 | struct node *node_dev = to_node(dev); |
31 | const struct cpumask *mask = cpumask_of_node(node_dev->dev.id); | ||
32 | 33 | ||
33 | /* 2008/04/07: buf currently PAGE_SIZE, need 9 chars per 32 bits. */ | 34 | /* 2008/04/07: buf currently PAGE_SIZE, need 9 chars per 32 bits. */ |
34 | BUILD_BUG_ON((NR_CPUS/32 * 9) > (PAGE_SIZE-1)); | 35 | BUILD_BUG_ON((NR_CPUS/32 * 9) > (PAGE_SIZE-1)); |
35 | 36 | ||
36 | return cpumap_print_to_pagebuf(list, buf, mask); | 37 | if (!alloc_cpumask_var(&mask, GFP_KERNEL)) |
38 | return 0; | ||
39 | |||
40 | cpumask_and(mask, cpumask_of_node(node_dev->dev.id), cpu_online_mask); | ||
41 | n = cpumap_print_to_pagebuf(list, buf, mask); | ||
42 | free_cpumask_var(mask); | ||
43 | |||
44 | return n; | ||
37 | } | 45 | } |
38 | 46 | ||
39 | static inline ssize_t node_read_cpumask(struct device *dev, | 47 | static inline ssize_t node_read_cpumask(struct device *dev, |