lkml.org 
[lkml]   [2021]   [Apr]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH 14/43] KVM: x86: Don't force set BSP bit when local APIC is managed by userspace
    From
    Don't set the BSP bit in vcpu->arch.apic_base when the local APIC is
    managed by userspace. Forcing all vCPUs to be BSPs is non-sensical, and
    was dead code when it was added by commit 97222cc83163 ("KVM: Emulate
    local APIC in kernel"). At the time, kvm_lapic_set_base() was invoked
    if and only if the local APIC was in-kernel (and it couldn't be called
    before the vCPU created its APIC).

    kvm_lapic_set_base() eventually gained generic usage, but the latent bug
    escaped notice because the only true consumer would be the guest itself
    in the form of an explicit RDMSRs on APs. Out of Linux, SeaBIOS, and
    EDK2/OVMF, only OVMF consume the BSP bit from the APIC_BASE MSR. For
    the vast majority of usage in OVMF, BSP confusion would be benign.
    OVMF's BSP election upon SMI rendezvous might be broken, but practically
    no one runs KVM with an out-of-kernel local APIC, let alone does so while
    utilizing SMIs with OVMF.

    Fixes: 97222cc83163 ("KVM: Emulate local APIC in kernel")
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    ---
    arch/x86/kvm/lapic.c | 3 ---
    1 file changed, 3 deletions(-)

    diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
    index b99630c6d7fe..c11f23753a5b 100644
    --- a/arch/x86/kvm/lapic.c
    +++ b/arch/x86/kvm/lapic.c
    @@ -2252,9 +2252,6 @@ void kvm_lapic_set_base(struct kvm_vcpu *vcpu, u64 value)
    u64 old_value = vcpu->arch.apic_base;
    struct kvm_lapic *apic = vcpu->arch.apic;

    - if (!apic)
    - value |= MSR_IA32_APICBASE_BSP;
    -
    vcpu->arch.apic_base = value;

    if ((old_value ^ value) & MSR_IA32_APICBASE_ENABLE)
    --
    2.31.1.498.g6c1eba8ee3d-goog
    \
     
     \ /
      Last update: 2021-04-24 02:50    [W:4.028 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site