aboutsummaryrefslogtreecommitdiff
path: root/target-i386/kvm.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2016-03-30 22:47:47 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2016-04-05 11:46:52 +0200
commit273c515c0a0b0c5357e421a45de2a3b3138c77e7 (patch)
tree07f77a64af2029e4946bd3dd6fc453f1c1c7b69a /target-i386/kvm.c
parent85bc2a15121e8bcd9f15eb75794a1eacca9d84bd (diff)
target-i386: do not pass MSR_TSC_AUX to KVM ioctls if CPUID bit is not set
KVM does not let you read or write this MSR if the corresponding CPUID bit is not set. This in turn causes MSRs that come after MSR_TSC_AUX to be ignored by KVM_SET_MSRS. One visible symptom is that s3.flat from kvm-unit-tests fails with CPUs that do not have RDTSCP, because the SMBASE is not reset to 0x30000 after reset. Fixes: c9b8f6b6210847b4381c5b2ee172b1c7eb9985d6 Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'target-i386/kvm.c')
-rw-r--r--target-i386/kvm.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 87ab969ae1..19e2d946cb 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -917,6 +917,9 @@ int kvm_arch_init_vcpu(CPUState *cs)
if (env->features[FEAT_1_EDX] & CPUID_MTRR) {
has_msr_mtrr = true;
}
+ if (!(env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_RDTSCP)) {
+ has_msr_tsc_aux = false;
+ }
return 0;
}