--- setup.o.c 2005-04-28 12:41:12.823456408 -0700 +++ setup.c 2005-04-28 13:11:04.187127736 -0700 @@ -731,19 +731,20 @@ int node = 0; if (c->x86_num_cores == 1) return; - cpu_core_id[cpu] = cpu >> hweight32(c->x86_num_cores - 1); + cpu_core_id[cpu] = cpu%c->x86_num_cores; #ifdef CONFIG_NUMA /* When an ACPI SRAT table is available use the mappings from SRAT instead. */ if (acpi_numa <= 0) { - node = cpu_core_id[cpu]; + node = cpu >> hweight32(c->x86_num_cores - 1); if (!node_online(node)) node = first_node(node_online_map); cpu_to_node[cpu] = node; } else { node = cpu_to_node[cpu]; } + phys_proc_id[cpu] = node; #endif printk(KERN_INFO "CPU %d(%d) -> Node %d -> Core %d\n", cpu, c->x86_num_cores, node, cpu_core_id[cpu]); --- smpboot.o.c 2005-04-28 13:00:03.611550488 -0700 +++ smpboot.c 2005-04-28 12:59:27.151093320 -0700 @@ -652,7 +652,7 @@ int i; if (smp_num_siblings > 1) { for_each_online_cpu (i) { - if (cpu_core_id[cpu] == cpu_core_id[i]) { + if (cpu_to_node[cpu] == cpu_to_node[i]) { siblings++; cpu_set(i, cpu_sibling_map[cpu]); }