]> git.proxmox.com Git - mirror_qemu.git/commitdiff
i386: correct cpu_x86_cpuid(0xd)
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Fri, 28 Sep 2018 10:43:19 +0000 (12:43 +0200)
committerEduardo Habkost <ehabkost@redhat.com>
Wed, 31 Oct 2018 00:14:43 +0000 (21:14 -0300)
Intel SDM says for CPUID function 0DH, sub-function 0:

| • ECX enumerates the size (in bytes) required by the XSAVE instruction for an
|   XSAVE area containing all the user state components supported by this
|   processor.
| • EBX enumerates the size (in bytes) required by the XSAVE instruction for an
|   XSAVE area containing all the user state components corresponding to bits
|   currently set in XCR0.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Message-Id: <20180928104319.3296-1-bigeasy@linutronix.de>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
target/i386/cpu.c

index 1469a1be01b7efec04e6160dc8d2c1b3554eee31..fe7c963e5e7526a50062c24ce6dd6312cf310093 100644 (file)
@@ -4178,7 +4178,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
             *ecx = xsave_area_size(x86_cpu_xsave_components(cpu));
             *eax = env->features[FEAT_XSAVE_COMP_LO];
             *edx = env->features[FEAT_XSAVE_COMP_HI];
-            *ebx = *ecx;
+            *ebx = xsave_area_size(env->xcr0);
         } else if (count == 1) {
             *eax = env->features[FEAT_XSAVE];
         } else if (count < ARRAY_SIZE(x86_ext_save_areas)) {