@@ -586,6 +586,7 @@
#define MSR_AMD_PERF_CTL 0xc0010062
#define MSR_AMD_PERF_STATUS 0xc0010063
#define MSR_AMD_PSTATE_DEF_BASE 0xc0010064
+#define MSR_AMD64_GUEST_TSC_FREQ 0xc0010134
#define MSR_AMD64_OSVW_ID_LENGTH 0xc0010140
#define MSR_AMD64_OSVW_STATUS 0xc0010141
#define MSR_AMD_PPIN_CTL 0xc00102f0
@@ -851,6 +851,8 @@ static int sev_es_sync_vmsa(struct vcpu_svm *svm)
save->dr6 = svm->vcpu.arch.dr6;
save->sev_features = sev->vmsa_features;
+ if (save->sev_features & SVM_SEV_FEAT_SECURE_TSC)
+ set_msr_interception(&svm->vcpu, svm->msrpm, MSR_AMD64_GUEST_TSC_FREQ, 1, 1);
/*
* Skip FPU and AVX setup with KVM_SEV_ES_INIT to avoid
@@ -142,6 +142,7 @@ static const struct svm_direct_access_msrs {
{ .index = X2APIC_MSR(APIC_TMICT), .always = false },
{ .index = X2APIC_MSR(APIC_TMCCT), .always = false },
{ .index = X2APIC_MSR(APIC_TDCR), .always = false },
+ { .index = MSR_AMD64_GUEST_TSC_FREQ, .always = false },
{ .index = MSR_INVALID, .always = false },
};
@@ -30,7 +30,7 @@
#define IOPM_SIZE PAGE_SIZE * 3
#define MSRPM_SIZE PAGE_SIZE * 2
-#define MAX_DIRECT_ACCESS_MSRS 48
+#define MAX_DIRECT_ACCESS_MSRS 49
#define MSRPM_OFFSETS 32
extern u32 msrpm_offsets[MSRPM_OFFSETS] __read_mostly;
extern bool npt_enabled;
TSC calculation in Secure TSC enabled guests uses a new read-only MSR 0xc0010134 (GUEST_TSC_FREQ). Add the GUEST_TSC_FREQ MSR and disable the interception when secure TSC is enabled. Moreover, GUEST_TSC_FREQ MSR is only available to the guest and is not accessible from hypervisor context. Signed-off-by: Nikunj A Dadhania <nikunj@amd.com> --- arch/x86/include/asm/msr-index.h | 1 + arch/x86/kvm/svm/sev.c | 2 ++ arch/x86/kvm/svm/svm.c | 1 + arch/x86/kvm/svm/svm.h | 2 +- 4 files changed, 5 insertions(+), 1 deletion(-)