[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 08/30] target/i386: work around KVM_GET_MSRS bug for secondary exe
From: |
Paolo Bonzini |
Subject: |
[PULL 08/30] target/i386: work around KVM_GET_MSRS bug for secondary execution controls |
Date: |
Wed, 2 Oct 2019 18:51:31 +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 7c5ad26..91d0bf6 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 00/30] Misc patches for 2010-10-02, Paolo Bonzini, 2019/10/02
- [PULL 02/30] target/i386: handle filtered_features in a new function mark_unavailable_features, Paolo Bonzini, 2019/10/02
- [PULL 01/30] tests/migration: Add a test for auto converge, Paolo Bonzini, 2019/10/02
- [PULL 03/30] target/i386: introduce generic feature dependency mechanism, Paolo Bonzini, 2019/10/02
- [PULL 04/30] target/i386: expand feature words to 64 bits, Paolo Bonzini, 2019/10/02
- [PULL 06/30] vmxcap: correct the name of the variables, Paolo Bonzini, 2019/10/02
- [PULL 08/30] target/i386: work around KVM_GET_MSRS bug for secondary execution controls,
Paolo Bonzini <=
- [PULL 05/30] target/i386: add VMX definitions, Paolo Bonzini, 2019/10/02
- [PULL 10/30] qemu-pr-helper: fix crash in mpath_reconstruct_sense, Paolo Bonzini, 2019/10/02
- [PULL 11/30] replay: don't synchronize memory operations in replay mode, Paolo Bonzini, 2019/10/02
- [PULL 07/30] target/i386: add VMX features, Paolo Bonzini, 2019/10/02
- [PULL 09/30] target/i386/kvm: Silence warning from Valgrind about uninitialized bytes, Paolo Bonzini, 2019/10/02
- [PULL 12/30] Makefile: Remove generated files when doing 'distclean', Paolo Bonzini, 2019/10/02