[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 01/28] target/i386: kvm: add support for TSC scaling
From: |
Paolo Bonzini |
Subject: |
[PULL 01/28] target/i386: kvm: add support for TSC scaling |
Date: |
Fri, 25 Jun 2021 16:17:55 +0200 |
Linux 5.14 will add support for nested TSC scaling. Add the
corresponding feature in QEMU; to keep support for existing kernels,
do not add it to any processor yet.
The handling of the VMCS enumeration MSR is ugly; once we have more than
one case, we may want to add a table to check VMX features against.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
target/i386/cpu.c | 2 +-
target/i386/cpu.h | 1 +
target/i386/kvm/kvm.c | 12 ++++++++----
3 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index a9fe1662d3..d8f3ab3192 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -1031,7 +1031,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
"vmx-invpcid-exit", "vmx-vmfunc", "vmx-shadow-vmcs",
"vmx-encls-exit",
"vmx-rdseed-exit", "vmx-pml", NULL, NULL,
"vmx-xsaves", NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
+ NULL, "vmx-tsc-scaling", NULL, NULL,
NULL, NULL, NULL, NULL,
},
.msr = {
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index 1e11071d81..f7fa5870b1 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -972,6 +972,7 @@ typedef uint64_t FeatureWordArray[FEATURE_WORDS];
#define VMX_SECONDARY_EXEC_RDSEED_EXITING 0x00010000
#define VMX_SECONDARY_EXEC_ENABLE_PML 0x00020000
#define VMX_SECONDARY_EXEC_XSAVES 0x00100000
+#define VMX_SECONDARY_EXEC_TSC_SCALING 0x02000000
#define VMX_PIN_BASED_EXT_INTR_MASK 0x00000001
#define VMX_PIN_BASED_NMI_EXITING 0x00000008
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
index ad950c3c27..04e4ec063f 100644
--- a/target/i386/kvm/kvm.c
+++ b/target/i386/kvm/kvm.c
@@ -2700,8 +2700,6 @@ static uint64_t make_vmx_msr_value(uint32_t index,
uint32_t features)
return must_be_one | (((uint64_t)can_be_one) << 32);
}
-#define VMCS12_MAX_FIELD_INDEX (0x17)
-
static void kvm_msr_entry_add_vmx(X86CPU *cpu, FeatureWordArray f)
{
uint64_t kvm_vmx_basic =
@@ -2791,8 +2789,14 @@ static void kvm_msr_entry_add_vmx(X86CPU *cpu,
FeatureWordArray f)
CR0_PE_MASK | CR0_PG_MASK | CR0_NE_MASK);
kvm_msr_entry_add(cpu, MSR_IA32_VMX_CR4_FIXED0,
CR4_VMXE_MASK);
- kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM,
- VMCS12_MAX_FIELD_INDEX << 1);
+
+ if (f[FEAT_VMX_SECONDARY_CTLS] & VMX_SECONDARY_EXEC_TSC_SCALING) {
+ /* TSC multiplier (0x2032). */
+ kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x32);
+ } else {
+ /* Preemption timer (0x482E). */
+ kvm_msr_entry_add(cpu, MSR_IA32_VMX_VMCS_ENUM, 0x2E);
+ }
}
static void kvm_msr_entry_add_perf(X86CPU *cpu, FeatureWordArray f)
--
2.31.1
- [PULL v2 00/28] Misc (including block file-posix) for 2021-06-23, Paolo Bonzini, 2021/06/25
- [PULL 03/28] configure: drop unused variables for xts, Paolo Bonzini, 2021/06/25
- [PULL 01/28] target/i386: kvm: add support for TSC scaling,
Paolo Bonzini <=
- [PULL 02/28] meson: drop unused CONFIG_GCRYPT_HMAC, Paolo Bonzini, 2021/06/25
- [PULL 04/28] meson: remove preadv from summary, Paolo Bonzini, 2021/06/25
- [PULL 06/28] configure, meson: convert crypto detection to meson, Paolo Bonzini, 2021/06/25
- [PULL 09/28] configure, meson: convert libusb detection to meson, Paolo Bonzini, 2021/06/25
- [PULL 05/28] tests: remove QCRYPTO_HAVE_TLS_TEST_SUPPORT, Paolo Bonzini, 2021/06/25
- [PULL 08/28] configure, meson: convert pam detection to meson, Paolo Bonzini, 2021/06/25
- [PULL 10/28] configure, meson: convert libcacard detection to meson, Paolo Bonzini, 2021/06/25
- [PULL 11/28] configure, meson: convert libusbredir detection to meson, Paolo Bonzini, 2021/06/25
- [PULL 07/28] configure, meson: convert libtasn1 detection to meson, Paolo Bonzini, 2021/06/25
- [PULL 12/28] KVM: Fix dirty ring mmap incorrect size due to renaming accident, Paolo Bonzini, 2021/06/25