Re: [PATCH] bug in bigsmp CPU bringup
From: Andrew Morton
Date: Wed May 05 2004 - 21:05:34 EST
Len, Martin: please review?
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/