• Dr. David Alan Gilbert's avatar
    KVM: x86: Always enable legacy FP/SSE in allowed user XFEATURES · a1020a25
    Dr. David Alan Gilbert authored
    Allow FP and SSE state to be saved and restored via KVM_{G,SET}_XSAVE on
    XSAVE-capable hosts even if their bits are not exposed to the guest via
    XCR0.
    
    Failing to allow FP+SSE first showed up as a QEMU live migration failure,
    where migrating a VM from a pre-XSAVE host, e.g. Nehalem, to an XSAVE
    host failed due to KVM rejecting KVM_SET_XSAVE.  However, the bug also
    causes problems even when migrating between XSAVE-capable hosts as
    KVM_GET_SAVE won't set any bits in user_xfeatures if XSAVE isn't exposed
    to the guest, i.e. KVM will fail to actually migrate FP+SSE.
    
    Because KVM_{G,S}ET_XSAVE are designed to allowing migrating between
    hosts with and without XSAVE, KVM_GET_XSAVE on a non-XSAVE (by way of
    fpu_copy_guest_fpstate_to_uabi()) always sets the FP+SSE bits in the
    header so that KVM_SET_XSAVE will work even if the new host supports
    XSAVE.
    
    Fixes: ad856280 ("x86/kvm/fpu: Limit guest user_xfeatures to supported bits of XCR0")
    bz: https://bugzilla.redhat.com/show_bug.cgi?id=2079311
    Cc: stable@vger.kernel.org
    Cc: Leonardo Bras <leobras@redhat.com>
    Signed-off-by: default avatarDr. David Alan Gilbert <dgilbert@redhat.com>
    [sean: add comment, massage changelog]
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20220824033057.3576315-3-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    a1020a25
cpuid.c 41.4 KB