mm, page_alloc: remove boot pageset initialization from memory hotplug
boot_pageset is a boot time hack which gets superseded by normal pagesets later in the boot process. It makes zero sense to reinitialize it again and again during memory hotplug. Link: http://lkml.kernel.org/r/20170721143915.14161-3-mhocko@kernel.org Signed-off-by: Michal Hocko <mhocko@suse.com> Acked-by: Mel Gorman <mgorman@suse.de> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Joonsoo Kim <js1304@gmail.com> Cc: Shaohua Li <shaohua.li@intel.com> Cc: Toshi Kani <toshi.kani@hpe.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
c9bff3eebc
commit
afb6ebb3fa
|
@ -5141,7 +5141,7 @@ DEFINE_MUTEX(zonelists_mutex);
|
|||
static int __build_all_zonelists(void *data)
|
||||
{
|
||||
int nid;
|
||||
int cpu;
|
||||
int __maybe_unused cpu;
|
||||
pg_data_t *self = data;
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
|
@ -5162,6 +5162,31 @@ static int __build_all_zonelists(void *data)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAVE_MEMORYLESS_NODES
|
||||
for_each_possible_cpu(cpu) {
|
||||
/*
|
||||
* We now know the "local memory node" for each node--
|
||||
* i.e., the node of the first zone in the generic zonelist.
|
||||
* Set up numa_mem percpu variable for on-line cpus. During
|
||||
* boot, only the boot cpu should be on-line; we'll init the
|
||||
* secondary cpus' numa_mem as they come on-line. During
|
||||
* node/memory hotplug, we'll fixup all on-line cpus.
|
||||
*/
|
||||
if (cpu_online(cpu))
|
||||
set_cpu_numa_mem(cpu, local_memory_node(cpu_to_node(cpu)));
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static noinline void __init
|
||||
build_all_zonelists_init(void)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
__build_all_zonelists(NULL);
|
||||
|
||||
/*
|
||||
* Initialize the boot_pagesets that are going to be used
|
||||
* for bootstrapping processors. The real pagesets for
|
||||
|
@ -5175,30 +5200,9 @@ static int __build_all_zonelists(void *data)
|
|||
* needs the percpu allocator in order to allocate its pagesets
|
||||
* (a chicken-egg dilemma).
|
||||
*/
|
||||
for_each_possible_cpu(cpu) {
|
||||
for_each_possible_cpu(cpu)
|
||||
setup_pageset(&per_cpu(boot_pageset, cpu), 0);
|
||||
|
||||
#ifdef CONFIG_HAVE_MEMORYLESS_NODES
|
||||
/*
|
||||
* We now know the "local memory node" for each node--
|
||||
* i.e., the node of the first zone in the generic zonelist.
|
||||
* Set up numa_mem percpu variable for on-line cpus. During
|
||||
* boot, only the boot cpu should be on-line; we'll init the
|
||||
* secondary cpus' numa_mem as they come on-line. During
|
||||
* node/memory hotplug, we'll fixup all on-line cpus.
|
||||
*/
|
||||
if (cpu_online(cpu))
|
||||
set_cpu_numa_mem(cpu, local_memory_node(cpu_to_node(cpu)));
|
||||
#endif
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static noinline void __init
|
||||
build_all_zonelists_init(void)
|
||||
{
|
||||
__build_all_zonelists(NULL);
|
||||
mminit_verify_zonelist();
|
||||
cpuset_init_current_mems_allowed();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue