• Bandan Das's avatar
    x86/apic: Include the LDR when clearing out APIC registers · 558682b5
    Bandan Das authored
    Although APIC initialization will typically clear out the LDR before
    setting it, the APIC cleanup code should reset the LDR.
    
    This was discovered with a 32-bit KVM guest jumping into a kdump
    kernel. The stale bits in the LDR triggered a bug in the KVM APIC
    implementation which caused the destination mapping for VCPUs to be
    corrupted.
    
    Note that this isn't intended to paper over the KVM APIC bug. The kernel
    has to clear the LDR when resetting the APIC registers except when X2APIC
    is enabled.
    
    This lacks a Fixes tag because missing to clear LDR goes way back into pre
    git history.
    
    [ tglx: Made x2apic_enabled a function call as required ]
    Signed-off-by: default avatarBandan Das <bsd@redhat.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190826101513.5080-3-bsd@redhat.com
    558682b5
apic.c 69.7 KB