i386: kvm: kvm_arch_get_supported_cpuid: move R_EDX hack outside of for loop
The for loop will become a separate function, so clean it up so it can become independent from the bit hacking for R_EDX. No behavior change[1], just code movement. [1] Well, only if the kernel returned CPUID leafs 1 or 0x80000001 as unsupported, but there's no kernel version that does that. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
aee0bf7d8d
commit
7b46e5ce81
@ -155,24 +155,29 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function,
|
|||||||
break;
|
break;
|
||||||
case R_EDX:
|
case R_EDX:
|
||||||
ret = cpuid->entries[i].edx;
|
ret = cpuid->entries[i].edx;
|
||||||
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,
|
|
||||||
* so add missing bits according to the AMD spec:
|
|
||||||
*/
|
|
||||||
cpuid_1_edx = kvm_arch_get_supported_cpuid(s, 1, 0, R_EDX);
|
|
||||||
ret |= cpuid_1_edx & CPUID_EXT2_AMD_ALIASES;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Fixups for the data returned by KVM, below */
|
||||||
|
|
||||||
|
if (reg == R_EDX) {
|
||||||
|
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,
|
||||||
|
* so add missing bits according to the AMD spec:
|
||||||
|
*/
|
||||||
|
cpuid_1_edx = kvm_arch_get_supported_cpuid(s, 1, 0, R_EDX);
|
||||||
|
ret |= cpuid_1_edx & CPUID_EXT2_AMD_ALIASES;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
g_free(cpuid);
|
g_free(cpuid);
|
||||||
|
|
||||||
/* fallback for older kernels */
|
/* fallback for older kernels */
|
||||||
|
Loading…
Reference in New Issue
Block a user