mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
mm, memory_hotplug: drop CONFIG_MOVABLE_NODE
Commit 20b2f52b73
("numa: add CONFIG_MOVABLE_NODE for
movable-dedicated node") has introduced CONFIG_MOVABLE_NODE without a
good explanation on why it is actually useful.
It makes a lot of sense to make movable node semantic opt in but we
already have that because the feature has to be explicitly enabled on
the kernel command line. A config option on top only makes the
configuration space larger without a good reason. It also adds an
additional ifdefery that pollutes the code.
Just drop the config option and make it de-facto always enabled. This
shouldn't introduce any change to the semantic.
Link: http://lkml.kernel.org/r/20170529114141.536-3-mhocko@kernel.org
Signed-off-by: Michal Hocko <mhocko@suse.com>
Acked-by: Reza Arbab <arbab@linux.vnet.ibm.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Yasuaki Ishimatsu <yasu.isimatu@gmail.com>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Cc: Kani Toshimitsu <toshi.kani@hpe.com>
Cc: Chen Yucong <slaoub@gmail.com>
Cc: Joonsoo Kim <js1304@gmail.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Daniel Kiper <daniel.kiper@oracle.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
57c0a17238
commit
f70029bbaa
@ -2303,8 +2303,11 @@
|
|||||||
that the amount of memory usable for all allocations
|
that the amount of memory usable for all allocations
|
||||||
is not too small.
|
is not too small.
|
||||||
|
|
||||||
movable_node [KNL] Boot-time switch to enable the effects
|
movable_node [KNL] Boot-time switch to make hotplugable memory
|
||||||
of CONFIG_MOVABLE_NODE=y. See mm/Kconfig for details.
|
NUMA nodes to be movable. This means that the memory
|
||||||
|
of such nodes will be usable only for movable
|
||||||
|
allocations which rules out almost all kernel
|
||||||
|
allocations. Use with caution!
|
||||||
|
|
||||||
MTD_Partition= [MTD]
|
MTD_Partition= [MTD]
|
||||||
Format: <name>,<region-number>,<size>,<offset>
|
Format: <name>,<region-number>,<size>,<offset>
|
||||||
|
@ -639,9 +639,7 @@ static struct node_attr node_state_attr[] = {
|
|||||||
#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
|
#endif
|
||||||
#ifdef CONFIG_MOVABLE_NODE
|
|
||||||
[N_MEMORY] = _NODE_ATTR(has_memory, N_MEMORY),
|
[N_MEMORY] = _NODE_ATTR(has_memory, N_MEMORY),
|
||||||
#endif
|
|
||||||
[N_CPU] = _NODE_ATTR(has_cpu, N_CPU),
|
[N_CPU] = _NODE_ATTR(has_cpu, N_CPU),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -652,9 +650,7 @@ static struct attribute *node_state_attrs[] = {
|
|||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
&node_state_attr[N_HIGH_MEMORY].attr.attr,
|
&node_state_attr[N_HIGH_MEMORY].attr.attr,
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_MOVABLE_NODE
|
|
||||||
&node_state_attr[N_MEMORY].attr.attr,
|
&node_state_attr[N_MEMORY].attr.attr,
|
||||||
#endif
|
|
||||||
&node_state_attr[N_CPU].attr.attr,
|
&node_state_attr[N_CPU].attr.attr,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
@ -57,10 +57,8 @@ struct memblock {
|
|||||||
|
|
||||||
extern struct memblock memblock;
|
extern struct memblock memblock;
|
||||||
extern int memblock_debug;
|
extern int memblock_debug;
|
||||||
#ifdef CONFIG_MOVABLE_NODE
|
|
||||||
/* If movable_node boot option specified */
|
/* If movable_node boot option specified */
|
||||||
extern bool movable_node_enabled;
|
extern bool movable_node_enabled;
|
||||||
#endif /* CONFIG_MOVABLE_NODE */
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_DISCARD_MEMBLOCK
|
#ifdef CONFIG_ARCH_DISCARD_MEMBLOCK
|
||||||
#define __init_memblock __meminit
|
#define __init_memblock __meminit
|
||||||
@ -169,7 +167,6 @@ void __next_reserved_mem_region(u64 *idx, phys_addr_t *out_start,
|
|||||||
i != (u64)ULLONG_MAX; \
|
i != (u64)ULLONG_MAX; \
|
||||||
__next_reserved_mem_region(&i, p_start, p_end))
|
__next_reserved_mem_region(&i, p_start, p_end))
|
||||||
|
|
||||||
#ifdef CONFIG_MOVABLE_NODE
|
|
||||||
static inline bool memblock_is_hotpluggable(struct memblock_region *m)
|
static inline bool memblock_is_hotpluggable(struct memblock_region *m)
|
||||||
{
|
{
|
||||||
return m->flags & MEMBLOCK_HOTPLUG;
|
return m->flags & MEMBLOCK_HOTPLUG;
|
||||||
@ -179,16 +176,6 @@ static inline bool __init_memblock movable_node_is_enabled(void)
|
|||||||
{
|
{
|
||||||
return movable_node_enabled;
|
return movable_node_enabled;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
static inline bool memblock_is_hotpluggable(struct memblock_region *m)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
static inline bool movable_node_is_enabled(void)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline bool memblock_is_mirror(struct memblock_region *m)
|
static inline bool memblock_is_mirror(struct memblock_region *m)
|
||||||
{
|
{
|
||||||
@ -296,7 +283,6 @@ phys_addr_t memblock_alloc_try_nid(phys_addr_t size, phys_addr_t align, int nid)
|
|||||||
|
|
||||||
phys_addr_t memblock_alloc(phys_addr_t size, phys_addr_t align);
|
phys_addr_t memblock_alloc(phys_addr_t size, phys_addr_t align);
|
||||||
|
|
||||||
#ifdef CONFIG_MOVABLE_NODE
|
|
||||||
/*
|
/*
|
||||||
* Set the allocation direction to bottom-up or top-down.
|
* Set the allocation direction to bottom-up or top-down.
|
||||||
*/
|
*/
|
||||||
@ -314,10 +300,6 @@ static inline bool memblock_bottom_up(void)
|
|||||||
{
|
{
|
||||||
return memblock.bottom_up;
|
return memblock.bottom_up;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
static inline void __init memblock_set_bottom_up(bool enable) {}
|
|
||||||
static inline bool memblock_bottom_up(void) { return false; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Flags for memblock_alloc_base() amd __memblock_alloc_base() */
|
/* Flags for memblock_alloc_base() amd __memblock_alloc_base() */
|
||||||
#define MEMBLOCK_ALLOC_ANYWHERE (~(phys_addr_t)0)
|
#define MEMBLOCK_ALLOC_ANYWHERE (~(phys_addr_t)0)
|
||||||
|
@ -387,11 +387,7 @@ 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) */
|
N_MEMORY, /* The node has memory(regular, high, movable) */
|
||||||
#else
|
|
||||||
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
|
||||||
};
|
};
|
||||||
|
26
mm/Kconfig
26
mm/Kconfig
@ -149,32 +149,6 @@ config NO_BOOTMEM
|
|||||||
config MEMORY_ISOLATION
|
config MEMORY_ISOLATION
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config MOVABLE_NODE
|
|
||||||
bool "Enable to assign a node which has only movable memory"
|
|
||||||
depends on HAVE_MEMBLOCK
|
|
||||||
depends on NO_BOOTMEM
|
|
||||||
depends on X86_64 || OF_EARLY_FLATTREE || MEMORY_HOTPLUG
|
|
||||||
depends on NUMA
|
|
||||||
default n
|
|
||||||
help
|
|
||||||
Allow a node to have only movable memory. Pages used by the kernel,
|
|
||||||
such as direct mapping pages cannot be migrated. So the corresponding
|
|
||||||
memory device cannot be hotplugged. This option allows the following
|
|
||||||
two things:
|
|
||||||
- When the system is booting, node full of hotpluggable memory can
|
|
||||||
be arranged to have only movable memory so that the whole node can
|
|
||||||
be hot-removed. (need movable_node boot option specified).
|
|
||||||
- After the system is up, the option allows users to online all the
|
|
||||||
memory of a node as movable memory so that the whole node can be
|
|
||||||
hot-removed.
|
|
||||||
|
|
||||||
Users who don't use the memory hotplug feature are fine with this
|
|
||||||
option on since they don't specify movable_node boot option or they
|
|
||||||
don't online memory as movable.
|
|
||||||
|
|
||||||
Say Y here if you want to hotplug a whole node.
|
|
||||||
Say N here if you want kernel to use memory on all nodes evenly.
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Only be set on architectures that have completely implemented memory hotplug
|
# Only be set on architectures that have completely implemented memory hotplug
|
||||||
# feature. If you are not sure, don't touch it.
|
# feature. If you are not sure, don't touch it.
|
||||||
|
@ -54,9 +54,7 @@ struct memblock memblock __initdata_memblock = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int memblock_debug __initdata_memblock;
|
int memblock_debug __initdata_memblock;
|
||||||
#ifdef CONFIG_MOVABLE_NODE
|
|
||||||
bool movable_node_enabled __initdata_memblock = false;
|
bool movable_node_enabled __initdata_memblock = false;
|
||||||
#endif
|
|
||||||
static bool system_has_some_mirror __initdata_memblock = false;
|
static bool system_has_some_mirror __initdata_memblock = false;
|
||||||
static int memblock_can_resize __initdata_memblock;
|
static int memblock_can_resize __initdata_memblock;
|
||||||
static int memblock_memory_in_slab __initdata_memblock = 0;
|
static int memblock_memory_in_slab __initdata_memblock = 0;
|
||||||
|
@ -1572,11 +1572,7 @@ check_pages_isolated(unsigned long start_pfn, unsigned long end_pfn)
|
|||||||
|
|
||||||
static int __init cmdline_parse_movable_node(char *p)
|
static int __init cmdline_parse_movable_node(char *p)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_MOVABLE_NODE
|
|
||||||
movable_node_enabled = true;
|
movable_node_enabled = true;
|
||||||
#else
|
|
||||||
pr_warn("movable_node option not supported\n");
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
early_param("movable_node", cmdline_parse_movable_node);
|
early_param("movable_node", cmdline_parse_movable_node);
|
||||||
|
@ -113,9 +113,7 @@ nodemask_t node_states[NR_NODE_STATES] __read_mostly = {
|
|||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
[N_HIGH_MEMORY] = { { [0] = 1UL } },
|
[N_HIGH_MEMORY] = { { [0] = 1UL } },
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_MOVABLE_NODE
|
|
||||||
[N_MEMORY] = { { [0] = 1UL } },
|
[N_MEMORY] = { { [0] = 1UL } },
|
||||||
#endif
|
|
||||||
[N_CPU] = { { [0] = 1UL } },
|
[N_CPU] = { { [0] = 1UL } },
|
||||||
#endif /* NUMA */
|
#endif /* NUMA */
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user