target/i386: Don't construct a all-zero entry for CPUID[0xD 0x3f]
Currently, QEMU always constructs a all-zero CPUID entry for CPUID[0xD 0x3f]. It's meaningless to construct such a leaf as the end of leaf 0xD. Rework the logic of how subleaves of 0xD are constructed to get rid of such all-zero value of subleaf 0x3f. Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> Link: https://lore.kernel.org/r/20240814075431.339209-2-xiaoyao.li@intel.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
f774a67750
commit
00c8a933d9
@ -1864,10 +1864,6 @@ static uint32_t kvm_x86_build_cpuid(CPUX86State *env,
|
|||||||
case 0xb:
|
case 0xb:
|
||||||
case 0xd:
|
case 0xd:
|
||||||
for (j = 0; ; j++) {
|
for (j = 0; ; j++) {
|
||||||
if (i == 0xd && j == 64) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
c->function = i;
|
c->function = i;
|
||||||
c->flags = KVM_CPUID_FLAG_SIGNIFCANT_INDEX;
|
c->flags = KVM_CPUID_FLAG_SIGNIFCANT_INDEX;
|
||||||
c->index = j;
|
c->index = j;
|
||||||
@ -1883,7 +1879,12 @@ static uint32_t kvm_x86_build_cpuid(CPUX86State *env,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i == 0xd && c->eax == 0) {
|
if (i == 0xd && c->eax == 0) {
|
||||||
continue;
|
if (j < 63) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
cpuid_i--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (cpuid_i == KVM_MAX_CPUID_ENTRIES) {
|
if (cpuid_i == KVM_MAX_CPUID_ENTRIES) {
|
||||||
goto full;
|
goto full;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user