• Thomas Gleixner's avatar
    x86/apic: Don't access the APIC when disabling x2APIC · 720a22fd
    Thomas Gleixner authored
    With 'iommu=off' on the kernel command line and x2APIC enabled by the BIOS
    the code which disables the x2APIC triggers an unchecked MSR access error:
    
      RDMSR from 0x802 at rIP: 0xffffffff94079992 (native_apic_msr_read+0x12/0x50)
    
    This is happens because default_acpi_madt_oem_check() selects an x2APIC
    driver before the x2APIC is disabled.
    
    When the x2APIC is disabled because interrupt remapping cannot be enabled
    due to 'iommu=off' on the command line, x2apic_disable() invokes
    apic_set_fixmap() which in turn tries to read the APIC ID. This triggers
    the MSR warning because x2APIC is disabled, but the APIC driver is still
    x2APIC based.
    
    Prevent that by adding an argument to apic_set_fixmap() which makes the
    APIC ID read out conditional and set it to false from the x2APIC disable
    path. That's correct as the APIC ID has already been read out during early
    discovery.
    
    Fixes: d10a9044
    
     ("x86/apic: Consolidate boot_cpu_physical_apicid initialization sites")
    Reported-by: default avatarAdrian Huang <ahuang12@lenovo.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Tested-by: default avatarAdrian Huang <ahuang12@lenovo.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/875xw5t6r7.ffs@tglx
    720a22fd
apic.c 66.5 KB