diff options
author | Alex Chiang <achiang@hp.com> | 2009-12-14 20:59:08 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-15 11:53:18 -0500 |
commit | 1830794ae6392ce12d36dbcc5ff52f11298ddab6 (patch) | |
tree | b1ebda5a62d2b8d904840f041fc334fecc274b18 /drivers/base | |
parent | b9d52dad9447d0db4b52d67d5e9e9d339b5e8302 (diff) |
mm: add numa node symlink for cpu devices in sysfs
You can discover which CPUs belong to a NUMA node by examining
/sys/devices/system/node/node#/
However, it's not convenient to go in the other direction, when looking at
/sys/devices/system/cpu/cpu#/
Yes, you can muck about in sysfs, but adding these symlinks makes life a
lot more convenient.
Signed-off-by: Alex Chiang <achiang@hp.com>
Acked-by: David Rientjes <rientjes@google.com>
Cc: Gary Hade <garyhade@us.ibm.com>
Cc: Badari Pulavarty <pbadari@us.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: David Rientjes <rientjes@google.com>
Cc: Greg KH <greg@kroah.com>
Cc: Randy Dunlap <randy.dunlap@oracle.com>
Cc: David Rientjes <rientjes@google.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/node.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/base/node.c b/drivers/base/node.c index 9b9acc39a1eb..41414113b9f0 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c | |||
@@ -271,6 +271,7 @@ struct node node_devices[MAX_NUMNODES]; | |||
271 | */ | 271 | */ |
272 | int register_cpu_under_node(unsigned int cpu, unsigned int nid) | 272 | int register_cpu_under_node(unsigned int cpu, unsigned int nid) |
273 | { | 273 | { |
274 | int ret; | ||
274 | struct sys_device *obj; | 275 | struct sys_device *obj; |
275 | 276 | ||
276 | if (!node_online(nid)) | 277 | if (!node_online(nid)) |
@@ -280,9 +281,15 @@ int register_cpu_under_node(unsigned int cpu, unsigned int nid) | |||
280 | if (!obj) | 281 | if (!obj) |
281 | return 0; | 282 | return 0; |
282 | 283 | ||
283 | return sysfs_create_link(&node_devices[nid].sysdev.kobj, | 284 | ret = sysfs_create_link(&node_devices[nid].sysdev.kobj, |
284 | &obj->kobj, | 285 | &obj->kobj, |
285 | kobject_name(&obj->kobj)); | 286 | kobject_name(&obj->kobj)); |
287 | if (ret) | ||
288 | return ret; | ||
289 | |||
290 | return sysfs_create_link(&obj->kobj, | ||
291 | &node_devices[nid].sysdev.kobj, | ||
292 | kobject_name(&node_devices[nid].sysdev.kobj)); | ||
286 | } | 293 | } |
287 | 294 | ||
288 | int unregister_cpu_under_node(unsigned int cpu, unsigned int nid) | 295 | int unregister_cpu_under_node(unsigned int cpu, unsigned int nid) |
@@ -298,6 +305,8 @@ int unregister_cpu_under_node(unsigned int cpu, unsigned int nid) | |||
298 | 305 | ||
299 | sysfs_remove_link(&node_devices[nid].sysdev.kobj, | 306 | sysfs_remove_link(&node_devices[nid].sysdev.kobj, |
300 | kobject_name(&obj->kobj)); | 307 | kobject_name(&obj->kobj)); |
308 | sysfs_remove_link(&obj->kobj, | ||
309 | kobject_name(&node_devices[nid].sysdev.kobj)); | ||
301 | 310 | ||
302 | return 0; | 311 | return 0; |
303 | } | 312 | } |