diff options
author | Yinghai Lu <yhlu.kernel@gmail.com> | 2008-08-11 16:36:04 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-08-11 16:42:59 -0400 |
commit | b74548e76a0eab1f29546e7c5a589429c069a680 (patch) | |
tree | c5e0e86109466568d3b486177e41e2ad90a2473a /arch/x86 | |
parent | 48d97cb65e62a5f1122ac2cf1149800d4f4693e8 (diff) |
x86: fix 2.6.27rc1 cannot boot more than 8CPUs
Jeff Chua reported that booting a !bigsmp kernel on a 16-way box
hangs silently.
this is a long-standing issue, smp start AP cpu could check the
apic id >=8 etc before trying to start it.
achieve this by moving the def_to_bigsmp check later and skip the
apicid id > 8
[ mingo@elte.hu: clean up the message that is printed. ]
Reported-by: "Jeff Chua" <jeff.chua.linux@gmail.com>
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/setup.c | 6 ------
arch/x86/kernel/smpboot.c | 10 ++++++++++
2 files changed, 10 insertions(+), 6 deletions(-)
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/setup.c | 6 | ||||
-rw-r--r-- | arch/x86/kernel/smpboot.c | 10 |
2 files changed, 10 insertions, 6 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 6e5823b9e765..68b48e3fbcbd 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -861,12 +861,6 @@ void __init setup_arch(char **cmdline_p) | |||
861 | init_apic_mappings(); | 861 | init_apic_mappings(); |
862 | ioapic_init_mappings(); | 862 | ioapic_init_mappings(); |
863 | 863 | ||
864 | #if defined(CONFIG_SMP) && defined(CONFIG_X86_PC) && defined(CONFIG_X86_32) | ||
865 | if (def_to_bigsmp) | ||
866 | printk(KERN_WARNING "More than 8 CPUs detected and " | ||
867 | "CONFIG_X86_PC cannot handle it.\nUse " | ||
868 | "CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n"); | ||
869 | #endif | ||
870 | kvm_guest_init(); | 864 | kvm_guest_init(); |
871 | 865 | ||
872 | e820_reserve_resources(); | 866 | e820_reserve_resources(); |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index da10f07fc59c..91055d7fc1b0 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -994,7 +994,17 @@ int __cpuinit native_cpu_up(unsigned int cpu) | |||
994 | flush_tlb_all(); | 994 | flush_tlb_all(); |
995 | low_mappings = 1; | 995 | low_mappings = 1; |
996 | 996 | ||
997 | #ifdef CONFIG_X86_PC | ||
998 | if (def_to_bigsmp && apicid > 8) { | ||
999 | printk(KERN_WARNING | ||
1000 | "More than 8 CPUs detected - skipping them.\n" | ||
1001 | "Use CONFIG_X86_GENERICARCH and CONFIG_X86_BIGSMP.\n"); | ||
1002 | err = -1; | ||
1003 | } else | ||
1004 | err = do_boot_cpu(apicid, cpu); | ||
1005 | #else | ||
997 | err = do_boot_cpu(apicid, cpu); | 1006 | err = do_boot_cpu(apicid, cpu); |
1007 | #endif | ||
998 | 1008 | ||
999 | zap_low_mappings(); | 1009 | zap_low_mappings(); |
1000 | low_mappings = 0; | 1010 | low_mappings = 0; |