summaryrefslogtreecommitdiff
path: root/target-i386/kvm.c
diff options
context:
space:
mode:
authorAndre Przywara <andre.przywara@amd.com>2011-06-10 15:56:28 +0200
committerMarcelo Tosatti <mtosatti@redhat.com>2011-06-20 15:26:21 -0300
commit31e8c69697becf5e0b54a6a0cef1d27109d469e9 (patch)
treea62d3d6ca528d09106830e7bb2d05a1f687434d9 /target-i386/kvm.c
parent3d39c9593314946258bb334737aa7a4d113731d8 (diff)
downloadqemu-31e8c69697becf5e0b54a6a0cef1d27109d469e9.tar.gz
qemu-31e8c69697becf5e0b54a6a0cef1d27109d469e9.tar.bz2
qemu-31e8c69697becf5e0b54a6a0cef1d27109d469e9.zip
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>
Diffstat (limited to 'target-i386/kvm.c')
-rw-r--r--target-i386/kvm.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 938e0a3e23..10fb2c4b07 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -416,6 +416,9 @@ int kvm_arch_init_vcpu(CPUState *env)
case 0xb:
case 0xd:
for (j = 0; ; j++) {
+ if (i == 0xd && j == 64) {
+ break;
+ }
c->function = i;
c->flags = KVM_CPUID_FLAG_SIGNIFCANT_INDEX;
c->index = j;
@@ -428,7 +431,7 @@ int kvm_arch_init_vcpu(CPUState *env)
break;
}
if (i == 0xd && c->eax == 0) {
- break;
+ continue;
}
c = &cpuid_data.entries[cpuid_i++];
}