diff options
Diffstat (limited to 'drivers/base/node.c')
| -rw-r--r-- | drivers/base/node.c | 13 | 
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/base/node.c b/drivers/base/node.c index 3855902f2c5b..ee090ab9171c 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * Basic Node interface support   */ @@ -27,13 +28,21 @@ static struct bus_type node_subsys = {  static ssize_t node_read_cpumap(struct device *dev, bool list, char *buf)  { +	ssize_t n; +	cpumask_var_t mask;  	struct node *node_dev = to_node(dev); -	const struct cpumask *mask = cpumask_of_node(node_dev->dev.id);  	/* 2008/04/07: buf currently PAGE_SIZE, need 9 chars per 32 bits. */  	BUILD_BUG_ON((NR_CPUS/32 * 9) > (PAGE_SIZE-1)); -	return cpumap_print_to_pagebuf(list, buf, mask); +	if (!alloc_cpumask_var(&mask, GFP_KERNEL)) +		return 0; + +	cpumask_and(mask, cpumask_of_node(node_dev->dev.id), cpu_online_mask); +	n = cpumap_print_to_pagebuf(list, buf, mask); +	free_cpumask_var(mask); + +	return n;  }  static inline ssize_t node_read_cpumask(struct device *dev,  | 
