diff options
author | Igor Mammedov <imammedo@redhat.com> | 2014-03-15 16:01:59 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-03-17 07:14:24 -0400 |
commit | 27ce825823a145eb72bd5a5832c6dbb3168b720e (patch) | |
tree | 332481f6854c502014a35c0ea247dd35cc2176fe /arch | |
parent | 8fbb1daf3e8254afc17fc4490b69db00920197ae (diff) |
KVM: x86 emulator: emulate MOVAPS
HCK memory driver test fails when testing 32-bit Windows 8.1
with baloon driver.
tracing KVM shows error:
reason EXIT_ERR rip 0x81c18326 info 0 0
x/10i 0x81c18326-20
0x0000000081c18312: add %al,(%eax)
0x0000000081c18314: add %cl,-0x7127711d(%esi)
0x0000000081c1831a: rolb $0x0,0x80ec(%ecx)
0x0000000081c18321: and $0xfffffff0,%esp
0x0000000081c18324: mov %esp,%esi
0x0000000081c18326: movaps %xmm0,(%esi)
0x0000000081c18329: movaps %xmm1,0x10(%esi)
0x0000000081c1832d: movaps %xmm2,0x20(%esi)
0x0000000081c18331: movaps %xmm3,0x30(%esi)
0x0000000081c18335: movaps %xmm4,0x40(%esi)
which points to MOVAPS instruction currently no emulated by KVM.
Fix it by adding appropriate entries to opcode table in KVM's emulator.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kvm/emulate.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 07ffca0a89e9..a26d075da58f 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c | |||
@@ -3668,6 +3668,10 @@ static const struct gprefix pfx_vmovntpx = { | |||
3668 | I(0, em_mov), N, N, N, | 3668 | I(0, em_mov), N, N, N, |
3669 | }; | 3669 | }; |
3670 | 3670 | ||
3671 | static const struct gprefix pfx_0f_28_0f_29 = { | ||
3672 | I(Aligned, em_mov), N, N, N, | ||
3673 | }; | ||
3674 | |||
3671 | static const struct escape escape_d9 = { { | 3675 | static const struct escape escape_d9 = { { |
3672 | N, N, N, N, N, N, N, I(DstMem, em_fnstcw), | 3676 | N, N, N, N, N, N, N, I(DstMem, em_fnstcw), |
3673 | }, { | 3677 | }, { |
@@ -3870,7 +3874,9 @@ static const struct opcode twobyte_table[256] = { | |||
3870 | IIP(ModRM | SrcMem | Priv | Op3264, em_cr_write, cr_write, check_cr_write), | 3874 | IIP(ModRM | SrcMem | Priv | Op3264, em_cr_write, cr_write, check_cr_write), |
3871 | IIP(ModRM | SrcMem | Priv | Op3264, em_dr_write, dr_write, check_dr_write), | 3875 | IIP(ModRM | SrcMem | Priv | Op3264, em_dr_write, dr_write, check_dr_write), |
3872 | N, N, N, N, | 3876 | N, N, N, N, |
3873 | N, N, N, GP(ModRM | DstMem | SrcReg | Sse | Mov | Aligned, &pfx_vmovntpx), | 3877 | GP(ModRM | DstReg | SrcMem | Mov | Sse, &pfx_0f_28_0f_29), |
3878 | GP(ModRM | DstMem | SrcReg | Mov | Sse, &pfx_0f_28_0f_29), | ||
3879 | N, GP(ModRM | DstMem | SrcReg | Sse | Mov | Aligned, &pfx_vmovntpx), | ||
3874 | N, N, N, N, | 3880 | N, N, N, N, |
3875 | /* 0x30 - 0x3F */ | 3881 | /* 0x30 - 0x3F */ |
3876 | II(ImplicitOps | Priv, em_wrmsr, wrmsr), | 3882 | II(ImplicitOps | Priv, em_wrmsr, wrmsr), |