From: Mike Travis There are two versions of per_cpu_init() for ia64. This patch corrects the problem that one of the versions did not insert the boot cpu into the cpu sibling and core maps. Signed-off-by: Mike Travis Cc: "Luck, Tony" Signed-off-by: Andrew Morton --- diff -puN arch/ia64/kernel/setup.c~convert-cpu_sibling_map-to-a-per_cpu-data-array-ia64-fix arch/ia64/kernel/setup.c --- a/arch/ia64/kernel/setup.c~convert-cpu_sibling_map-to-a-per_cpu-data-array-ia64-fix +++ a/arch/ia64/kernel/setup.c @@ -869,6 +869,14 @@ cpu_init (void) void *cpu_data; cpu_data = per_cpu_init(); + /* + * insert boot cpu into sibling and core mapes + * (must be done after per_cpu area is setup) + */ + if (smp_processor_id() == 0) { + cpu_set(0, per_cpu(cpu_sibling_map, 0)); + cpu_set(0, cpu_core_map[0]); + } /* * We set ar.k3 so that assembly code in MCA handler can compute diff -puN arch/ia64/mm/contig.c~convert-cpu_sibling_map-to-a-per_cpu-data-array-ia64-fix arch/ia64/mm/contig.c --- a/arch/ia64/mm/contig.c~convert-cpu_sibling_map-to-a-per_cpu-data-array-ia64-fix +++ a/arch/ia64/mm/contig.c @@ -212,12 +212,6 @@ per_cpu_init (void) cpu_data += PERCPU_PAGE_SIZE; per_cpu(local_per_cpu_offset, cpu) = __per_cpu_offset[cpu]; } - /* - * cpu_sibling_map is now a per_cpu variable - it needs to - * be accessed after per_cpu_init() sets up the per_cpu area. - */ - cpu_set(0, per_cpu(cpu_sibling_map, 0)); - cpu_set(0, cpu_core_map[0]); } return __per_cpu_start + __per_cpu_offset[smp_processor_id()]; } _