• Jim Mattson's avatar
    x86: KVM: Add feature flag for CPUID.80000021H:EAX[bit 1] · 329369ca
    Jim Mattson authored
    Define an X86_FEATURE_* flag for CPUID.80000021H:EAX.[bit 1], and
    advertise the feature to userspace via KVM_GET_SUPPORTED_CPUID.
    
    Per AMD's "Processor Programming Reference (PPR) for AMD Family 19h
    Model 61h, Revision B1 Processors (56713-B1-PUB)," this CPUID bit
    indicates that a WRMSR to MSR_FS_BASE, MSR_GS_BASE, or
    MSR_KERNEL_GS_BASE is non-serializing. This is a change in previously
    architected behavior.
    
    Effectively, this CPUID bit is a "defeature" bit, or a reverse
    polarity feature bit. When this CPUID bit is clear, the feature
    (serialization on WRMSR to any of these three MSRs) is available. When
    this CPUID bit is set, the feature is not available.
    
    KVM_GET_SUPPORTED_CPUID must pass this bit through from the underlying
    hardware, if it is set. Leaving the bit clear claims that WRMSR to
    these three MSRs will be serializing in a guest running under
    KVM. That isn't true. Though KVM could emulate the feature by
    intercepting writes to the specified MSRs, it does not do so
    today. The guest is allowed direct read/write access to these MSRs
    without interception, so the innate hardware behavior is preserved
    under KVM.
    Signed-off-by: default avatarJim Mattson <jmattson@google.com>
    Reviewed-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
    Reviewed-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20231005031237.1652871-1-jmattson@google.comSigned-off-by: default avatarSean Christopherson <seanjc@google.com>
    329369ca
cpufeatures.h 32.4 KB