KVM: Fix XSAVE feature bit enumeration

When iterating through the XSAVE feature enumeration CPUID leaf (0xD)
we should not stop at the first zero EAX, but instead keep scanning
since there are gaps in the enumeration (ECX=1 for instance).
This fixes the proper usage of AVX in KVM guests.

Signed-off-by: Andre Przywara <andre.przywara@amd.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
Andre Przywara 2011-06-10 15:56:28 +02:00 committed by Marcelo Tosatti
parent 3d39c95933
commit 31e8c69697

View File

@ -416,6 +416,9 @@ int kvm_arch_init_vcpu(CPUState *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;
@ -428,7 +431,7 @@ int kvm_arch_init_vcpu(CPUState *env)
break; break;
} }
if (i == 0xd && c->eax == 0) { if (i == 0xd && c->eax == 0) {
break; continue;
} }
c = &cpuid_data.entries[cpuid_i++]; c = &cpuid_data.entries[cpuid_i++];
} }