Skip to content

Commit

Permalink
target-i386: fix cpuid leaf 0x0d
Browse files Browse the repository at this point in the history
Fix cpuid leaf 0x0d which incorrectly parsed eax and ebx.

However, before this patch the CPUID worked fine -- the .offset
field contained the size _and_ was stored in the register that
is supposed to hold the size (eax), and likewise the .size field
contained the offset _and_ was stored in the register trhat is
supposed to hold the offset (ebx).

Signed-off-by: Liu Jinsong <jinsong.liu@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
Liu Jinsong authored and bonzini committed Dec 5, 2013
1 parent ef36fa1 commit 33f373d
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions target-i386/cpu.c
Expand Up @@ -335,7 +335,7 @@ typedef struct ExtSaveArea {

static const ExtSaveArea ext_save_areas[] = {
[2] = { .feature = FEAT_1_ECX, .bits = CPUID_EXT_AVX,
.offset = 0x100, .size = 0x240 },
.offset = 0x240, .size = 0x100 },
};

const char *get_register_name_32(unsigned int reg)
Expand Down Expand Up @@ -2227,8 +2227,8 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
const ExtSaveArea *esa = &ext_save_areas[count];
if ((env->features[esa->feature] & esa->bits) == esa->bits &&
(kvm_mask & (1 << count)) != 0) {
*eax = esa->offset;
*ebx = esa->size;
*eax = esa->size;
*ebx = esa->offset;
}
}
break;
Expand Down

0 comments on commit 33f373d

Please sign in to comment.