Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dee5d0d5 authored by Alex Chiang's avatar Alex Chiang Committed by Linus Torvalds
Browse files

mm: add numa node symlink for memory section in sysfs



Commit c04fc586 (mm: show node to memory section relationship with
symlinks in sysfs) created symlinks from nodes to memory sections, e.g.

/sys/devices/system/node/node1/memory135 -> ../../memory/memory135

If you're examining the memory section though and are wondering what node
it might belong to, you can find it by grovelling around in sysfs, but
it's a little cumbersome.

Add a reverse symlink for each memory section that points back to the
node to which it belongs.

Signed-off-by: default avatarAlex Chiang <achiang@hp.com>
Cc: Gary Hade <garyhade@us.ibm.com>
Cc: Badari Pulavarty <pbadari@us.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Acked-by: default avatarDavid 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: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d99be1a8
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -60,6 +60,19 @@ Description:
Users:		hotplug memory remove tools
		https://w3.opensource.ibm.com/projects/powerpc-utils/


What:		/sys/devices/system/memoryX/nodeY
Date:		October 2009
Contact:	Linux Memory Management list <linux-mm@kvack.org>
Description:
		When CONFIG_NUMA is enabled, a symbolic link that
		points to the corresponding NUMA node directory.

		For example, the following symbolic link is created for
		memory section 9 on node0:
		/sys/devices/system/memory/memory9/node0 -> ../../node/node0


What:		/sys/devices/system/node/nodeX/memoryY
Date:		September 2008
Contact:	Gary Hade <garyhade@us.ibm.com>
@@ -70,4 +83,3 @@ Description:
		memory section directory.  For example, the following symbolic
		link is created for memory section 9 on node0.
		/sys/devices/system/node/node0/memory9 -> ../../memory/memory9
+7 −4
Original line number Diff line number Diff line
@@ -160,12 +160,15 @@ Under each section, you can see 4 files.
NOTE:
  These directories/files appear after physical memory hotplug phase.

If CONFIG_NUMA is enabled the
/sys/devices/system/memory/memoryXXX memory section
directories can also be accessed via symbolic links located in
the /sys/devices/system/node/node* directories.  For example:
If CONFIG_NUMA is enabled the memoryXXX/ directories can also be accessed
via symbolic links located in the /sys/devices/system/node/node* directories.

For example:
/sys/devices/system/node/node0/memory9 -> ../../memory/memory9

A backlink will also be created:
/sys/devices/system/memory/memory9/node0 -> ../../node/node0

--------------------------------
4. Physical memory hot-add phase
--------------------------------
+10 −1
Original line number Diff line number Diff line
@@ -312,6 +312,7 @@ static int get_nid_for_pfn(unsigned long pfn)
/* register memory section under specified node if it spans that node */
int register_mem_sect_under_node(struct memory_block *mem_blk, int nid)
{
	int ret;
	unsigned long pfn, sect_start_pfn, sect_end_pfn;

	if (!mem_blk)
@@ -328,9 +329,15 @@ int register_mem_sect_under_node(struct memory_block *mem_blk, int nid)
			continue;
		if (page_nid != nid)
			continue;
		return sysfs_create_link_nowarn(&node_devices[nid].sysdev.kobj,
		ret = sysfs_create_link_nowarn(&node_devices[nid].sysdev.kobj,
					&mem_blk->sysdev.kobj,
					kobject_name(&mem_blk->sysdev.kobj));
		if (ret)
			return ret;

		return sysfs_create_link_nowarn(&mem_blk->sysdev.kobj,
				&node_devices[nid].sysdev.kobj,
				kobject_name(&node_devices[nid].sysdev.kobj));
	}
	/* mem section does not span the specified node */
	return 0;
@@ -359,6 +366,8 @@ int unregister_mem_sect_under_nodes(struct memory_block *mem_blk)
			continue;
		sysfs_remove_link(&node_devices[nid].sysdev.kobj,
			 kobject_name(&mem_blk->sysdev.kobj));
		sysfs_remove_link(&mem_blk->sysdev.kobj,
			 kobject_name(&node_devices[nid].sysdev.kobj));
	}
	return 0;
}