Re: [BUG] i386 2.6.18 cpu_up: attempt to bring up CPU 4 failed : kernel BUG at mm/slab.c:2698!

Andrew Morton
2006-09-23T05:19:33Z

On Fri, 22 Sep 2006 12:44:18 -0700
keith mannthey <kmannth@us.ibm.com> wrote:

> 3. Flat mode i386 numa on a real numa system is broken. If there is
> only 1 node in the system cpus should think they are apart of some other
> node. Patch below.
>
>
>
> If cases where a real numa system boots the Flat numa option make sure
> the cpus don't claim to be apart on a non-existent node.
>
>
> Signed-off-by: Keith Mannthey <kmannth@us.ibm.com>
>
> --- linux-2.6.18/arch/i386/kernel/smpboot.c 2006-09-19
> 20:42:06.000000000 -0700
> +++ linux-2.6.18-workes/arch/i386/kernel/smpboot.c 2006-09-21
> 21:57:55.000000000 -0700
> @@ -642,9 +642,13 @@
> {
> int cpu = smp_processor_id();
> int apicid = logical_smp_processor_id();
> -
> + int node = apicid_to_node(apicid);
> +
> + if (!node_online(node))
> + node = first_online_node;
> +
> cpu_2_logical_apicid[cpu] = apicid;
> - map_cpu_to_node(cpu, apicid_to_node(apicid));
> + map_cpu_to_node(cpu, node);
> }
>
> static void unmap_cpu_to_logical_apicid(int cpu)

This clashes with your
convert-i386-summit-subarch-to-use-srat-info-for-apicid_to_node-calls.patch.

I fixed it thusly:

static void map_cpu_to_logical_apicid(void)
{
int cpu = smp_processor_id();
int apicid = logical_smp_processor_id();
int node = apicid_to_node(hard_smp_processor_id());

if (!node_online(node))
node = first_online_node;

cpu_2_logical_apicid[cpu] = apicid;
map_cpu_to_node(cpu, node);
}