diff options
author | Andre Przywara <andre.przywara@amd.com> | 2009-06-25 00:08:04 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-06-29 13:52:12 -0500 |
commit | 6c0d7ee8951a330c0885b0ebcd4c9596661900a9 (patch) | |
tree | 6c63fa52bb7744be9555f68042ec244da27a6e65 /target-i386/kvm.c | |
parent | 671e4676076fb62860986decd44440d97bcc872d (diff) |
preserve the hypervisor bit while KVM trims the CPUID bits
The KVM kernel will disable all bits in CPUID which are not present in
the host. As this is mostly true for the hypervisor bit (1.ecx),
preserve its value before the trim and restore it afterwards.
Signed-off-by: Andre Przywara <andre.przywara@amd.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'target-i386/kvm.c')
-rw-r--r-- | target-i386/kvm.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/target-i386/kvm.c b/target-i386/kvm.c index 70a9b45588..4a3f598e4f 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -143,8 +143,12 @@ int kvm_arch_init_vcpu(CPUState *env) kvm_trim_features(&env->cpuid_features, kvm_arch_get_supported_cpuid(env, 1, R_EDX)); + + i = env->cpuid_ext_features & CPUID_EXT_HYPERVISOR; kvm_trim_features(&env->cpuid_ext_features, kvm_arch_get_supported_cpuid(env, 1, R_ECX)); + env->cpuid_ext_features |= i; + kvm_trim_features(&env->cpuid_ext2_features, kvm_arch_get_supported_cpuid(env, 0x80000001, R_EDX)); kvm_trim_features(&env->cpuid_ext3_features, |