s390/bitops: Use correct constraint for arch_test_bit() inline assembly
authorHeiko Carstens <hca@linux.ibm.com>
Thu, 23 Jan 2025 08:14:15 +0000 (09:14 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Sun, 26 Jan 2025 16:24:08 +0000 (17:24 +0100)
Use the "Q" instead of "R" constraint to correctly reflect the instruction
format of the tm instruction: the first operand is a memory reference
without index register and short displacement. The "R" constraint indicates
a memory reference with index register instead.

This may lead to compile errors like:

  arch/s390/include/asm/bitops.h: Assembler messages:
  arch/s390/include/asm/bitops.h:60: Error: operand 1: syntax error; missing ')' after base register
  arch/s390/include/asm/bitops.h:60: Error: operand 2: syntax error; ')' not allowed here
  arch/s390/include/asm/bitops.h:60: Error: junk at end of line: `,4'

Reported-by: Nathan Chancellor <nathan@kernel.org>
Closes: https://lore.kernel.org/r/20250122-s390-fix-std-for-gcc-15-v1-1-8b00cadee083@kernel.org
Fixes: b2bc1b1a77c0 ("s390/bitops: Provide optimized arch_test_bit()")
Acked-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/include/asm/bitops.h

index 15aa64e3020e5c61d4f173d42021e7a5cd51998c..d5125296ade25b24f66610f0cca293e3e056539a 100644 (file)
@@ -60,7 +60,7 @@ static __always_inline bool arch_test_bit(unsigned long nr, const volatile unsig
                asm volatile(
                        "       tm      %[addr],%[mask]\n"
                        : "=@cc" (cc)
-                       : [addr] "R" (*addr), [mask] "I" (mask)
+                       : [addr] "Q" (*addr), [mask] "I" (mask)
                        );
                return cc == 3;
        }