Re: [PATCH] bug in bigsmp CPU bringup

From: Martin J. Bligh
Date: Thu May 06 2004 - 00:34:21 EST


> Len, Martin: please review?

Looked already (in fact I suggested he do that). Looks fine, it's
exactly the same fix we use for Summit. Since we're using the other
method instead of the bitmap, this check isn't needed, so we can just
bypass it. This way also has the great advantage of being isolated
to the bigsmp subarch, so it only needs testing there ;-)

Thanks,

M.

> From: "Pallipadi, Venkatesh" <venkatesh.pallipadi@xxxxxxxxx>
>
> There is an bug in bigsmp sub-architecture, due to which it will not enable
> all the CPUs when the BIOS-APICIDs are not 0 to n-1 (where n is total
> number of CPUs). Particularly, only 2 CPU comes up on a system that has 4
> CPUs with BIOS APICID as (0, 1, 6, 7).
>
> The bug is root caused to check_apicid_present(bit) call in smpboot.c, when
> bigsmp is expecting apicid in place of bit. check_apicid_present(bit) in
> bigsmp subarchitecture checks the bit with phys_id_present_map (which is
> actually map representing all apicids and not bit).
>
> One solution is to change check_apicid_present(bit) to
> check_apicid_present(apicid), in smp_boot_cpus(). But, it can affect all
> the other subarchitectures in various subtle ways. So, here is a simple
> alternate fix (Thanks to Martin Bligh), which solves the above problem.
>
>
> ---
>
> 25-akpm/include/asm-i386/mach-bigsmp/mach_apic.h | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletion(-)
>
> diff -puN include/asm-i386/mach-bigsmp/mach_apic.h~bigsmp-cpu-bringup-fix include/asm-i386/mach-bigsmp/mach_apic.h
> --- 25/include/asm-i386/mach-bigsmp/mach_apic.h~bigsmp-cpu-bringup-fix 2004-05-05 19:02:18.299905696 -0700
> +++ 25-akpm/include/asm-i386/mach-bigsmp/mach_apic.h 2004-05-05 19:02:18.302905240 -0700
> @@ -37,9 +37,10 @@ static inline unsigned long check_apicid
> return 0;
> }
>
> +/* we don't use the phys_cpu_present_map to indicate apicid presence */
> static inline unsigned long check_apicid_present(int bit)
> {
> - return physid_isset(bit, phys_cpu_present_map);
> + return 1;
> }
>
> #define apicid_cluster(apicid) (apicid & 0xF0)
>
> _
>
>


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/