OSDN Git Service

x86/x2apic: Use state information for disable
authorThomas Gleixner <tglx@linutronix.de>
Thu, 15 Jan 2015 21:22:27 +0000 (21:22 +0000)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 22 Jan 2015 14:10:55 +0000 (15:10 +0100)
Use the state information to simplify the disable logic further.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Borislav Petkov <bp@alien8.de>
Cc: Jiang Liu <jiang.liu@linux.intel.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Tony Luck <tony.luck@intel.com>
Link: http://lkml.kernel.org/r/20150115211703.209387598@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/apic/apic.c

index 0ee96b9..0c554f5 100644 (file)
@@ -1547,26 +1547,20 @@ void x2apic_setup(void)
 
 static __init void x2apic_disable(void)
 {
-       u64 msr;
-
-       if (!cpu_has_x2apic)
-               return;
-
-       rdmsrl(MSR_IA32_APICBASE, msr);
-       if (msr & X2APIC_ENABLE) {
-               u32 x2apic_id = read_apic_id();
+       u32 x2apic_id;
 
-               if (x2apic_id >= 255)
-                       panic("Cannot disable x2apic, id: %08x\n", x2apic_id);
+       if (x2apic_state != X2APIC_ON)
+               goto out;
 
-               __x2apic_disable();
-
-               x2apic_mode = 0;
-
-               register_lapic_address(mp_lapic_addr);
-       }
+       x2apic_id = read_apic_id();
+       if (x2apic_id >= 255)
+               panic("Cannot disable x2apic, id: %08x\n", x2apic_id);
 
+       __x2apic_disable();
+       register_lapic_address(mp_lapic_addr);
+out:
        x2apic_state = X2APIC_DISABLED;
+       x2apic_mode = 0;
 }
 
 static __init void x2apic_enable(void)