• Vitaly Kuznetsov's avatar
    KVM: x86: Hyper-V invariant TSC control · 2be1bd3a
    Vitaly Kuznetsov authored
    Normally, genuine Hyper-V doesn't expose architectural invariant TSC
    (CPUID.80000007H:EDX[8]) to its guests by default. A special PV MSR
    (HV_X64_MSR_TSC_INVARIANT_CONTROL, 0x40000118) and corresponding CPUID
    feature bit (CPUID.0x40000003.EAX[15]) were introduced. When bit 0 of the
    PV MSR is set, invariant TSC bit starts to show up in CPUID. When the
    feature is exposed to Hyper-V guests, reenlightenment becomes unneeded.
    
    Add the feature to KVM. Keep CPUID output intact when the feature
    wasn't exposed to L1 and implement the required logic for hiding
    invariant TSC when the feature was exposed and invariant TSC control
    MSR wasn't written to. Copy genuine Hyper-V behavior and forbid to
    disable the feature once it was enabled.
    
    For the reference, for linux guests, support for the feature was added
    in commit dce7cd62 ("x86/hyperv: Allow guests to enable InvariantTSC").
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Reviewed-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20221013095849.705943-4-vkuznets@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    2be1bd3a
kvm_host.h 65.5 KB