]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: x86: Swap the dst and src operand for MOVNTDQA
authorSean Christopherson <seanjc@google.com>
Wed, 6 May 2026 21:35:14 +0000 (14:35 -0700)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 12 May 2026 21:12:32 +0000 (23:12 +0200)
Swap the MOVNTDQA operands, as MOVNTDQA does NOT in fact have "the same
characteristics as 0F E7 (MOVNTDQ)"; MOVNTDQA loads from memory and stores
to registers, while MOVNTDQ loads from registers and stores to memory.

Per the SDM:

 MOVNTDQ - Move packed integer values in xmm1 to m128 using non-temporal
           hint.

 MOVNTDQA - Move double quadword from m128 to xmm1 using non-temporal hint
            if WC memory type.

Reported-by: Josh Eads <josheads@google.com>
Fixes: c57d9bafbd0b ("KVM: x86: Add support for emulating MOVNTDQA")
Cc: stable@vger.kernel.org
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-ID: <20260506213514.2781948-1-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/emulate.c

index c8c6cc0406d6dd7264808b6a7a4c16e5e56fa74b..8013dccb31102a6e20782e2ecff525722e6a7fff 100644 (file)
@@ -4481,7 +4481,7 @@ static const struct opcode opcode_map_0f_38[256] = {
        X16(N), X16(N),
        /* 0x20 - 0x2f */
        X8(N),
-       X2(N), GP(SrcReg | DstMem | ModRM | Mov | Aligned, &pfx_0f_e7_0f_38_2a), N, N, N, N, N,
+       X2(N), GP(SrcMem | DstReg | ModRM | Mov | Aligned, &pfx_0f_e7_0f_38_2a), N, N, N, N, N,
        /* 0x30 - 0x7f */
        X16(N), X16(N), X16(N), X16(N), X16(N),
        /* 0x80 - 0xef */