s390/cio/ioasm: Fix __xsch() condition code handling

For the __xsch() inline assembly the conversion to flag output macros is
incomplete. Only the conditional shift of the return value was added, while
the required changes to the inline assembly itself are missing.

If compiled with GCC versions before 14.2 this leads to a double shift of
the cc output operand and therefore the returned value of __xsch() is
incorrectly always zero, instead of the expected condition code.

Fixes: e200565d43 ("s390/cio/ioasm: Convert to use flag output macros")
Cc: stable@vger.kernel.org
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Acked-by: Alexander Gordeev <agordeev@linux.ibm.com>
Reviewed-by: Juergen Christ <jchrist@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
This commit is contained in:
Heiko Carstens
2025-09-25 10:45:17 +02:00
committed by Alexander Gordeev
parent fa7a0a53ee
commit f0edc8f113

View File

@@ -253,11 +253,10 @@ static inline int __xsch(struct subchannel_id schid)
asm volatile(
" lgr 1,%[r1]\n"
" xsch\n"
" ipm %[cc]\n"
" srl %[cc],28\n"
: [cc] "=&d" (ccode)
CC_IPM(cc)
: CC_OUT(cc, ccode)
: [r1] "d" (r1)
: "cc", "1");
: CC_CLOBBER_LIST("1"));
return CC_TRANSFORM(ccode);
}