Commit b1713b13 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fix from Thomas Gleixner:
 "A single fix for a APIC regression introduced in 4.0 which went
  undetected until now.

  I screwed up the x2apic cleanup in a subtle way.  The screwup is only
  visible on systems which have x2apic preenabled in the BIOS and need
  to disable it during boot"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/apic: Fix fallout from x2apic cleanup
parents 883985f6 a57e456a
...@@ -1424,7 +1424,7 @@ static inline void __x2apic_disable(void) ...@@ -1424,7 +1424,7 @@ static inline void __x2apic_disable(void)
{ {
u64 msr; u64 msr;
if (cpu_has_apic) if (!cpu_has_apic)
return; return;
rdmsrl(MSR_IA32_APICBASE, msr); rdmsrl(MSR_IA32_APICBASE, msr);
...@@ -1483,10 +1483,13 @@ void x2apic_setup(void) ...@@ -1483,10 +1483,13 @@ void x2apic_setup(void)
static __init void x2apic_disable(void) static __init void x2apic_disable(void)
{ {
u32 x2apic_id; u32 x2apic_id, state = x2apic_state;
if (x2apic_state != X2APIC_ON) x2apic_mode = 0;
goto out; x2apic_state = X2APIC_DISABLED;
if (state != X2APIC_ON)
return;
x2apic_id = read_apic_id(); x2apic_id = read_apic_id();
if (x2apic_id >= 255) if (x2apic_id >= 255)
...@@ -1494,9 +1497,6 @@ static __init void x2apic_disable(void) ...@@ -1494,9 +1497,6 @@ static __init void x2apic_disable(void)
__x2apic_disable(); __x2apic_disable();
register_lapic_address(mp_lapic_addr); register_lapic_address(mp_lapic_addr);
out:
x2apic_state = X2APIC_DISABLED;
x2apic_mode = 0;
} }
static __init void x2apic_enable(void) static __init void x2apic_enable(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment