提交 6c0d7ee8 编写于 作者: A Andre Przywara 提交者: Anthony Liguori

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: NAndre Przywara <andre.przywara@amd.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 671e4676
......@@ -362,6 +362,7 @@
#define CPUID_EXT_POPCNT (1 << 23)
#define CPUID_EXT_XSAVE (1 << 26)
#define CPUID_EXT_OSXSAVE (1 << 27)
#define CPUID_EXT_HYPERVISOR (1 << 31)
#define CPUID_EXT2_SYSCALL (1 << 11)
#define CPUID_EXT2_MP (1 << 19)
......
......@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册