From: Prarit Bhargava <prarit@redhat.com> Date: Wed, 10 Mar 2010 18:26:19 -0500 Subject: [misc] add /sys/devices/system/node/nodeX/cpulist files Message-id: <20100310182619.17829.55770.sendpatchset@prarit.bos.redhat.com> Patchwork-id: 23538 O-Subject: [RHEL5.6 PATCH]: Add /sys/devices/system/node/nodeX/cpulist files Bugzilla: 572285 RH-Acked-by: Dean Nelson <dnelson@redhat.com> RH-Acked-by: Bob Picco <bpicco@redhat.com> RH-Acked-by: Jarod Wilson <jarod@redhat.com> RH-Acked-by: Pete Zaitcev <zaitcev@redhat.com> Add /sys/devices/system/node/nodeX/cpulist entry which exports the cpus in a node in a human readable format. We already provide the cpumask, so the change is relatively simple. Backported from upstream as of commit 522dba7134d6b2e5821d3457f7941ec34f668e6d. Successfully tested by me using numainfo. Resolves 572285. Signed-off-by: Jarod Wilson <jarod@redhat.com> diff --git a/drivers/base/node.c b/drivers/base/node.c index e9b0957..54c2cda 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -18,7 +18,7 @@ static struct sysdev_class node_class = { }; -static ssize_t node_read_cpumap(struct sys_device * dev, char * buf) +static ssize_t node_read_cpumap(struct sys_device * dev, int type, char * buf) { struct node *node_dev = to_node(dev); cpumask_t mask = node_to_cpumask(node_dev->sysdev.id); @@ -27,12 +27,25 @@ static ssize_t node_read_cpumap(struct sys_device * dev, char * buf) /* 2004/06/03: buf currently PAGE_SIZE, need > 1 char per 4 bits. */ BUILD_BUG_ON(MAX_NUMNODES/4 > PAGE_SIZE/2); - len = cpumask_scnprintf(buf, PAGE_SIZE-1, mask); - len += sprintf(buf + len, "\n"); + len = type? + cpulist_scnprintf(buf, PAGE_SIZE-2, mask) : + cpumask_scnprintf(buf, PAGE_SIZE-2, mask); + buf[len++] = '\n'; + buf[len] = '\0'; return len; } -static SYSDEV_ATTR(cpumap, S_IRUGO, node_read_cpumap, NULL); +static ssize_t node_read_cpumask(struct sys_device *dev, char *buf) +{ + return node_read_cpumap(dev, 0, buf); +} +static ssize_t node_read_cpulist(struct sys_device *dev, char *buf) +{ + return node_read_cpumap(dev, 1, buf); +} + +static SYSDEV_ATTR(cpumap, S_IRUGO, node_read_cpumask, NULL); +static SYSDEV_ATTR(cpulist, S_IRUGO, node_read_cpulist, NULL); #define K(x) ((x) << (PAGE_SHIFT - 10)) static ssize_t node_read_meminfo(struct sys_device * dev, char * buf) @@ -144,6 +157,7 @@ int register_node(struct node *node, int num, struct node *parent) if (!error){ sysdev_create_file(&node->sysdev, &attr_cpumap); + sysdev_create_file(&node->sysdev, &attr_cpulist); sysdev_create_file(&node->sysdev, &attr_meminfo); sysdev_create_file(&node->sysdev, &attr_numastat); sysdev_create_file(&node->sysdev, &attr_distance); @@ -161,6 +175,7 @@ int register_node(struct node *node, int num, struct node *parent) void unregister_node(struct node *node) { sysdev_remove_file(&node->sysdev, &attr_cpumap); + sysdev_remove_file(&node->sysdev, &attr_cpulist); sysdev_remove_file(&node->sysdev, &attr_meminfo); sysdev_remove_file(&node->sysdev, &attr_numastat); sysdev_remove_file(&node->sysdev, &attr_distance);