KVM: x86: Fix up misreported CPU features

From qemu-kvm: Kernels before 2.6.30 misreported some essential CPU
features via KVM_GET_SUPPORTED_CPUID. Fix them up.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
This commit is contained in:
Jan Kiszka 2010-02-03 21:16:37 +01:00 committed by Marcelo Tosatti
parent aee028b95d
commit 19ccb8ea17

View File

@ -99,12 +99,18 @@ uint32_t kvm_arch_get_supported_cpuid(CPUState *env, uint32_t function, int reg)
break; break;
case R_EDX: case R_EDX:
ret = cpuid->entries[i].edx; ret = cpuid->entries[i].edx;
if (function == 0x80000001) { switch (function) {
case 1:
/* KVM before 2.6.30 misreports the following features */
ret |= CPUID_MTRR | CPUID_PAT | CPUID_MCE | CPUID_MCA;
break;
case 0x80000001:
/* On Intel, kvm returns cpuid according to the Intel spec, /* On Intel, kvm returns cpuid according to the Intel spec,
* so add missing bits according to the AMD spec: * so add missing bits according to the AMD spec:
*/ */
cpuid_1_edx = kvm_arch_get_supported_cpuid(env, 1, R_EDX); cpuid_1_edx = kvm_arch_get_supported_cpuid(env, 1, R_EDX);
ret |= cpuid_1_edx & 0xdfeff7ff; ret |= cpuid_1_edx & 0xdfeff7ff;
break;
} }
break; break;
} }