Both numa_init_array() and init_cpu_to_node() aim at setting up the cpu to node map, so combining them. And the coming patch will set up node to cpumask map in the combined function. Signed-off-by: Pingfan Liu <kernelfans@xxxxxxxxx> CC: Thomas Gleixner <tglx@xxxxxxxxxxxxx> CC: Ingo Molnar <mingo@xxxxxxxxxx> CC: Borislav Petkov <bp@xxxxxxxxx> CC: "H. Peter Anvin" <hpa@xxxxxxxxx> CC: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx> CC: Vlastimil Babka <vbabka@xxxxxxx> CC: Mike Rapoport <rppt@xxxxxxxxxxxxxxxxxx> CC: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> CC: Mel Gorman <mgorman@xxxxxxx> CC: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> CC: Andy Lutomirski <luto@xxxxxxxxxx> CC: Andi Kleen <ak@xxxxxxxxxxxxxxx> CC: Petr Tesarik <ptesarik@xxxxxxx> CC: Michal Hocko <mhocko@xxxxxxxx> CC: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> CC: Jonathan Corbet <corbet@xxxxxxx> CC: Nicholas Piggin <npiggin@xxxxxxxxx> CC: Daniel Vacek <neelx@xxxxxxxxxx> CC: linux-kernel@xxxxxxxxxxxxxxx --- arch/x86/mm/numa.c | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index bfe6732..c8dd7af 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c @@ -599,30 +599,6 @@ static int __init numa_register_memblks(struct numa_meminfo *mi) return 0; } -#ifdef CONFIG_NUMA -/* - * There are unfortunately some poorly designed mainboards around that - * only connect memory to a single CPU. This breaks the 1:1 cpu->node - * mapping. To avoid this fill in the mapping for all possible CPUs, - * as the number of CPUs is not known yet. We round robin the existing - * nodes. - */ -static void __init numa_init_array(void) -{ - int rr, i; - - rr = first_node(node_online_map); - for (i = 0; i < nr_cpu_ids; i++) { - if (early_cpu_to_node(i) != NUMA_NO_NODE) - continue; - numa_set_node(i, rr); - rr = next_node_in(rr, node_online_map); - } -} -#else -static void __init numa_init_array(void) {} -#endif - static int __init numa_init(int (*init_func)(void)) { int i; @@ -675,7 +651,6 @@ static int __init numa_init(int (*init_func)(void)) if (!node_online(nid)) numa_clear_node(i); } - numa_init_array(); return 0; } @@ -758,14 +733,26 @@ void __init init_cpu_to_node(void) { int cpu; u16 *cpu_to_apicid = early_per_cpu_ptr(x86_cpu_to_apicid); + int rr; BUG_ON(cpu_to_apicid == NULL); + rr = first_node(node_online_map); for_each_possible_cpu(cpu) { int node = numa_cpu_node(cpu); - if (node == NUMA_NO_NODE) + /* + * There are unfortunately some poorly designed mainboards + * around that only connect memory to a single CPU. This + * breaks the 1:1 cpu->node mapping. To avoid this fill in + * the mapping for all possible CPUs, as the number of CPUs + * is not known yet. We round robin the existing nodes. + */ + if (node == NUMA_NO_NODE) { + numa_set_node(cpu, rr); + rr = next_node_in(rr, node_online_map); continue; + } if (!node_online(node)) init_memory_less_node(node); -- 2.7.4