diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 6b23df1be909..94e64784a8be 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -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(); }