From: "Andi Kleen" Fix some outdated assumptions that CPU numbers are equal numbers. Depends on the unlimited cpus patch. Signed-off-by: Andi Kleen Signed-off-by: Andrew Morton --- 25-akpm/arch/x86_64/kernel/setup64.c | 7 +++---- 25-akpm/arch/x86_64/mm/numa.c | 5 +---- 2 files changed, 4 insertions(+), 8 deletions(-) diff -puN arch/x86_64/kernel/setup64.c~x86_64-fix-some-outdated-assumptions-that-cpu-numbers arch/x86_64/kernel/setup64.c --- 25/arch/x86_64/kernel/setup64.c~x86_64-fix-some-outdated-assumptions-that-cpu-numbers 2004-11-28 01:54:48.114282624 -0800 +++ 25-akpm/arch/x86_64/kernel/setup64.c 2004-11-28 01:54:48.120281712 -0800 @@ -83,13 +83,12 @@ void __init setup_per_cpu_areas(void) for (i = 0; i < NR_CPUS; i++) { unsigned char *ptr; - /* If possible allocate on the node of the CPU. - In case it doesn't exist round-robin nodes. */ - if (!NODE_DATA(i % numnodes)) { + + if (!NODE_DATA(cpu_to_node(i))) { printk("cpu with no node %d, numnodes %d\n", i, numnodes); ptr = alloc_bootmem(size); } else { - ptr = alloc_bootmem_node(NODE_DATA(i % numnodes), size); + ptr = alloc_bootmem_node(NODE_DATA(cpu_to_node(i)), size); } if (!ptr) panic("Cannot allocate cpu data for CPU %d\n", i); diff -puN arch/x86_64/mm/numa.c~x86_64-fix-some-outdated-assumptions-that-cpu-numbers arch/x86_64/mm/numa.c --- 25/arch/x86_64/mm/numa.c~x86_64-fix-some-outdated-assumptions-that-cpu-numbers 2004-11-28 01:54:48.116282320 -0800 +++ 25-akpm/arch/x86_64/mm/numa.c 2004-11-28 01:54:48.120281712 -0800 @@ -152,15 +152,12 @@ void __init numa_init_array(void) CPUs, as the number of CPUs is not known yet. We round robin the existing nodes. */ rr = 0; - for (i = 0; i < MAX_NUMNODES; i++) { - if (node_online(i)) - continue; + for (i = 0; i < NR_CPUS; i++) { if (cpu_to_node[i] != NUMA_NO_NODE) continue; rr = next_node(rr, node_online_map); if (rr == MAX_NUMNODES) rr = first_node(node_online_map); - node_data[i] = node_data[rr]; cpu_to_node[i] = rr; rr++; } _