• Thomas Gleixner's avatar
    x86/apic: Clear stale x2apic mode · f7ccadac
    Thomas Gleixner authored
    If x2apic got disabled on the kernel command line, then the following
    issue can happen:
    
    enable_IR_x2apic()
       ....
       x2apic_mode = 1;
       enable_x2apic();
    
         if (x2apic_disabled) {
    	__disable_x2apic();
    	return;
         }
    
    That leaves X2APIC disabled in hardware, but x2apic_mode stays 1. So
    all other code which checks x2apic_mode gets the wrong information.
    
    Set x2apic_mode to 0 after disabling it in hardware.
    
    This is just a hotfix. The proper solution is to rework this code so
    it has seperate functions for the initial setup on the boot processor
    and the secondary cpus, but that's beyond the scope of this fix.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Jiang Liu <jiang.liu@linux.intel.com>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: iommu@lists.linux-foundation.org
    Cc: H. Peter Anvin <hpa@linux.intel.com>
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Yinghai Lu <yinghai@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: David Rientjes <rientjes@google.com>
    Cc: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>
    Cc: Jan Beulich <JBeulich@suse.com>
    Cc: Richard Weinberger <richard@nod.at>
    Cc: Oren Twaig <oren@scalemp.com>
    f7ccadac
apic.c 61.9 KB