Commit b1c41ac3 authored by Heiko Carstens's avatar Heiko Carstens Committed by Vasily Gorbik

KVM: s390: fix __insn32_query() inline assembly

The inline assembly constraints of __insn32_query() tell the compiler
that only the first byte of "query" is being written to. Intended was
probably that 32 bytes are written to.

Fix and simplify the code and just use a "memory" clobber.

Fixes: d6681397 ("KVM: s390: provide query function for instructions returning 32 byte")
Cc: stable@vger.kernel.org # v5.2+
Acked-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent 61c31347
...@@ -332,7 +332,7 @@ static inline int plo_test_bit(unsigned char nr) ...@@ -332,7 +332,7 @@ static inline int plo_test_bit(unsigned char nr)
return cc == 0; return cc == 0;
} }
static inline void __insn32_query(unsigned int opcode, u8 query[32]) static inline void __insn32_query(unsigned int opcode, u8 *query)
{ {
register unsigned long r0 asm("0") = 0; /* query function */ register unsigned long r0 asm("0") = 0; /* query function */
register unsigned long r1 asm("1") = (unsigned long) query; register unsigned long r1 asm("1") = (unsigned long) query;
...@@ -340,9 +340,9 @@ static inline void __insn32_query(unsigned int opcode, u8 query[32]) ...@@ -340,9 +340,9 @@ static inline void __insn32_query(unsigned int opcode, u8 query[32])
asm volatile( asm volatile(
/* Parameter regs are ignored */ /* Parameter regs are ignored */
" .insn rrf,%[opc] << 16,2,4,6,0\n" " .insn rrf,%[opc] << 16,2,4,6,0\n"
: "=m" (*query) :
: "d" (r0), "a" (r1), [opc] "i" (opcode) : "d" (r0), "a" (r1), [opc] "i" (opcode)
: "cc"); : "cc", "memory");
} }
#define INSN_SORTL 0xb938 #define INSN_SORTL 0xb938
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment