aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/apic/apic.c
diff options
context:
space:
mode:
authorSuresh Siddha <suresh.b.siddha@intel.com>2009-02-21 17:23:21 -0500
committerIngo Molnar <mingo@elte.hu>2009-02-22 12:20:50 -0500
commitef1f87aa7ba6224bef1b750b3272ba281d8f43ed (patch)
treeaa20b7b3c6ff0eefccb17c02589f02c624bba8df /arch/x86/kernel/apic/apic.c
parent9be1b56a3e718aa998772019c57c398dbb19e258 (diff)
x86: select x2apic ops in early apic probe only if x2apic mode is enabled
If BIOS hands over the control to OS in legacy xapic mode, select legacy xapic related ops in the early apic probe and shift to x2apic ops later in the boot sequence, only after enabling x2apic mode. If BIOS hands over the control in x2apic mode, select x2apic related ops in the early apic probe. This fixes the early boot panic, where we were selecting x2apic ops, while the cpu is still in legacy xapic mode. Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Cc: Yinghai Lu <yinghai@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/apic/apic.c')
-rw-r--r--arch/x86/kernel/apic/apic.c9
1 files changed, 1 insertions, 8 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index c12823eb55b5..47c2d12e5cf5 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -1265,14 +1265,7 @@ void __cpuinit end_local_APIC_setup(void)
1265#ifdef CONFIG_X86_X2APIC 1265#ifdef CONFIG_X86_X2APIC
1266void check_x2apic(void) 1266void check_x2apic(void)
1267{ 1267{
1268 int msr, msr2; 1268 if (x2apic_enabled()) {
1269
1270 if (!cpu_has_x2apic)
1271 return;
1272
1273 rdmsr(MSR_IA32_APICBASE, msr, msr2);
1274
1275 if (msr & X2APIC_ENABLE) {
1276 pr_info("x2apic enabled by BIOS, switching to x2apic ops\n"); 1269 pr_info("x2apic enabled by BIOS, switching to x2apic ops\n");
1277 x2apic_preenabled = x2apic = 1; 1270 x2apic_preenabled = x2apic = 1;
1278 } 1271 }