On Fri, Jul 11, 2014 at 10:56 AM, Alex Williamson <alex.williamson@xxxxxxxxxx> wrote: > Windows 8.1 guest with NVIDIA driver and GPU fails to boot with an > emulation failure. The KVM spew suggests the fault is with lack of > movntdq emulation (courtesy of Paolo): > > Code=02 00 00 b8 08 00 00 00 f3 0f 6f 44 0a f0 f3 0f 6f 4c 0a e0 <66> 0f e7 41 f0 66 0f e7 49 e0 48 83 e9 40 f3 0f 6f 44 0a 10 f3 0f 6f 0c 0a 66 0f e7 41 10 > > $ as -o a.out > .section .text > .byte 0x66, 0x0f, 0xe7, 0x41, 0xf0 > .byte 0x66, 0x0f, 0xe7, 0x49, 0xe0 > $ objdump -d a.out > 0: 66 0f e7 41 f0 movntdq %xmm0,-0x10(%rcx) > 5: 66 0f e7 49 e0 movntdq %xmm1,-0x20(%rcx) > > Add the necessary emulation. > > Signed-off-by: Alex Williamson <alex.williamson@xxxxxxxxxx> > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > --- > > Hope I got all the flags correct from copying similar MOV ops, but it > allows the guest to boot, so I suspect it's ok. > > arch/x86/kvm/emulate.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > index e4e833d..ae39f08 100644 > --- a/arch/x86/kvm/emulate.c > +++ b/arch/x86/kvm/emulate.c > @@ -3681,6 +3681,10 @@ static const struct gprefix pfx_0f_28_0f_29 = { > I(Aligned, em_mov), I(Aligned, em_mov), N, N, > }; > > +static const struct gprefix pfx_0f_e7 = { > + N, I(Sse, em_mov), N, N, I think you need 'Aligned' flag in here - from my reading of the manual, this instruction will #GP if the memory operand isn't aligned. > +}; > + > static const struct escape escape_d9 = { { > N, N, N, N, N, N, N, I(DstMem, em_fnstcw), > }, { > @@ -3951,7 +3955,8 @@ static const struct opcode twobyte_table[256] = { > /* 0xD0 - 0xDF */ > N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, > /* 0xE0 - 0xEF */ > - N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, > + N, N, N, N, N, N, N, GP(SrcReg | DstMem | ModRM | Mov, &pfx_0f_e7), > + N, N, N, N, N, N, N, N, > /* 0xF0 - 0xFF */ > N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N > }; > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html