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

Commit 20b2f52b authored by Lai Jiangshan's avatar Lai Jiangshan Committed by Linus Torvalds
Browse files

numa: add CONFIG_MOVABLE_NODE for movable-dedicated node



We need a node which only contains movable memory.  This feature is very
important for node hotplug.  If a node has normal/highmem, the memory may
be used by the kernel and can't be offlined.  If the node only contains
movable memory, we can offline the memory and the node.

All are prepared, we can actually introduce N_MEMORY.
add CONFIG_MOVABLE_NODE make we can use it for movable-dedicated node

[akpm@linux-foundation.org: fix Kconfig text]
Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
Tested-by: default avatarYasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Signed-off-by: default avatarWen Congyang <wency@cn.fujitsu.com>
Cc: Jiang Liu <jiang.liu@huawei.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Minchan Kim <minchan.kim@gmail.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: David Rientjes <rientjes@google.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 68ae564b
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -643,6 +643,9 @@ static struct node_attr node_state_attr[] = {
	[N_NORMAL_MEMORY] = _NODE_ATTR(has_normal_memory, N_NORMAL_MEMORY),
	[N_NORMAL_MEMORY] = _NODE_ATTR(has_normal_memory, N_NORMAL_MEMORY),
#ifdef CONFIG_HIGHMEM
#ifdef CONFIG_HIGHMEM
	[N_HIGH_MEMORY] = _NODE_ATTR(has_high_memory, N_HIGH_MEMORY),
	[N_HIGH_MEMORY] = _NODE_ATTR(has_high_memory, N_HIGH_MEMORY),
#endif
#ifdef CONFIG_MOVABLE_NODE
	[N_MEMORY] = _NODE_ATTR(has_memory, N_MEMORY),
#endif
#endif
	[N_CPU] = _NODE_ATTR(has_cpu, N_CPU),
	[N_CPU] = _NODE_ATTR(has_cpu, N_CPU),
};
};
@@ -653,6 +656,9 @@ static struct attribute *node_state_attrs[] = {
	&node_state_attr[N_NORMAL_MEMORY].attr.attr,
	&node_state_attr[N_NORMAL_MEMORY].attr.attr,
#ifdef CONFIG_HIGHMEM
#ifdef CONFIG_HIGHMEM
	&node_state_attr[N_HIGH_MEMORY].attr.attr,
	&node_state_attr[N_HIGH_MEMORY].attr.attr,
#endif
#ifdef CONFIG_MOVABLE_NODE
	&node_state_attr[N_MEMORY].attr.attr,
#endif
#endif
	&node_state_attr[N_CPU].attr.attr,
	&node_state_attr[N_CPU].attr.attr,
	NULL
	NULL
+4 −0
Original line number Original line Diff line number Diff line
@@ -380,7 +380,11 @@ enum node_states {
#else
#else
	N_HIGH_MEMORY = N_NORMAL_MEMORY,
	N_HIGH_MEMORY = N_NORMAL_MEMORY,
#endif
#endif
#ifdef CONFIG_MOVABLE_NODE
	N_MEMORY,		/* The node has memory(regular, high, movable) */
#else
	N_MEMORY = N_HIGH_MEMORY,
	N_MEMORY = N_HIGH_MEMORY,
#endif
	N_CPU,		/* The node has one or more cpus */
	N_CPU,		/* The node has one or more cpus */
	NR_NODE_STATES
	NR_NODE_STATES
};
};
+8 −0
Original line number Original line Diff line number Diff line
@@ -143,6 +143,14 @@ config NO_BOOTMEM
config MEMORY_ISOLATION
config MEMORY_ISOLATION
	boolean
	boolean


config MOVABLE_NODE
	boolean "Enable to assign a node which has only movable memory"
	depends on HAVE_MEMBLOCK
	depends on NO_BOOTMEM
	depends on X86_64
	depends on NUMA
	default y

# eventually, we can have this option just 'select SPARSEMEM'
# eventually, we can have this option just 'select SPARSEMEM'
config MEMORY_HOTPLUG
config MEMORY_HOTPLUG
	bool "Allow for memory hot-add"
	bool "Allow for memory hot-add"
+3 −0
Original line number Original line Diff line number Diff line
@@ -89,6 +89,9 @@ nodemask_t node_states[NR_NODE_STATES] __read_mostly = {
	[N_NORMAL_MEMORY] = { { [0] = 1UL } },
	[N_NORMAL_MEMORY] = { { [0] = 1UL } },
#ifdef CONFIG_HIGHMEM
#ifdef CONFIG_HIGHMEM
	[N_HIGH_MEMORY] = { { [0] = 1UL } },
	[N_HIGH_MEMORY] = { { [0] = 1UL } },
#endif
#ifdef CONFIG_MOVABLE_NODE
	[N_MEMORY] = { { [0] = 1UL } },
#endif
#endif
	[N_CPU] = { { [0] = 1UL } },
	[N_CPU] = { { [0] = 1UL } },
#endif	/* NUMA */
#endif	/* NUMA */