[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 28/29] target/i386: work around KVM_GET_MSRS bug for secondary exe
From: |
Paolo Bonzini |
Subject: |
[PULL 28/29] target/i386: work around KVM_GET_MSRS bug for secondary execution controls |
Date: |
Fri, 4 Oct 2019 18:59:22 +0200 |
Some secondary controls are automatically enabled/disabled based on the CPUID
values that are set for the guest. However, they are still available at a
global level and therefore should be present when KVM_GET_MSRS is sent to
/dev/kvm.
Unfortunately KVM forgot to include those, so fix that.
Signed-off-by: Paolo Bonzini <address@hidden>
---
target/i386/kvm.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/target/i386/kvm.c b/target/i386/kvm.c
index 45f0a1f..be4bbfb 100644
--- a/target/i386/kvm.c
+++ b/target/i386/kvm.c
@@ -479,6 +479,23 @@ uint64_t kvm_arch_get_supported_msr_feature(KVMState *s,
uint32_t index)
value = msr_data.entries[0].data;
switch (index) {
case MSR_IA32_VMX_PROCBASED_CTLS2:
+ /* KVM forgot to add these bits for some time, do this ourselves. */
+ if (kvm_arch_get_supported_cpuid(s, 0xD, 1, R_ECX) &
CPUID_XSAVE_XSAVES) {
+ value |= (uint64_t)VMX_SECONDARY_EXEC_XSAVES << 32;
+ }
+ if (kvm_arch_get_supported_cpuid(s, 1, 0, R_ECX) & CPUID_EXT_RDRAND) {
+ value |= (uint64_t)VMX_SECONDARY_EXEC_RDRAND_EXITING << 32;
+ }
+ if (kvm_arch_get_supported_cpuid(s, 7, 0, R_EBX) &
CPUID_7_0_EBX_INVPCID) {
+ value |= (uint64_t)VMX_SECONDARY_EXEC_ENABLE_INVPCID << 32;
+ }
+ if (kvm_arch_get_supported_cpuid(s, 7, 0, R_EBX) &
CPUID_7_0_EBX_RDSEED) {
+ value |= (uint64_t)VMX_SECONDARY_EXEC_RDSEED_EXITING << 32;
+ }
+ if (kvm_arch_get_supported_cpuid(s, 0x80000001, 0, R_EDX) &
CPUID_EXT2_RDTSCP) {
+ value |= (uint64_t)VMX_SECONDARY_EXEC_RDTSCP << 32;
+ }
+ /* fall through */
case MSR_IA32_VMX_TRUE_PINBASED_CTLS:
case MSR_IA32_VMX_TRUE_PROCBASED_CTLS:
case MSR_IA32_VMX_TRUE_ENTRY_CTLS:
--
1.8.3.1
- [PULL v3 00/29] Misc patches for 2019-10-02, Paolo Bonzini, 2019/10/04
- [PULL 22/29] target/i386: handle filtered_features in a new function mark_unavailable_features, Paolo Bonzini, 2019/10/04
- [PULL 23/29] target/i386: introduce generic feature dependency mechanism, Paolo Bonzini, 2019/10/04
- [PULL 24/29] target/i386: expand feature words to 64 bits, Paolo Bonzini, 2019/10/04
- [PULL 25/29] target/i386: add VMX definitions, Paolo Bonzini, 2019/10/04
- [PULL 26/29] vmxcap: correct the name of the variables, Paolo Bonzini, 2019/10/04
- [PULL 27/29] target/i386: add VMX features, Paolo Bonzini, 2019/10/04
- [PULL 28/29] target/i386: work around KVM_GET_MSRS bug for secondary execution controls,
Paolo Bonzini <=
- [PULL 29/29] target/i386/kvm: Silence warning from Valgrind about uninitialized bytes, Paolo Bonzini, 2019/10/04
- Re: [PULL v3 00/29] Misc patches for 2019-10-02, Peter Maydell, 2019/10/07