]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/dasd: Convert to use flag output macros
authorHeiko Carstens <hca@linux.ibm.com>
Thu, 7 Nov 2024 15:11:50 +0000 (16:11 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Wed, 13 Nov 2024 13:31:33 +0000 (14:31 +0100)
Use flag output macros in inline asm to allow for better code generation if
the compiler has support for the flag output constraint.

Reviewed-by: Juergen Christ <jchrist@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
drivers/s390/block/dasd_diag.c

index 8245b742e4a23c2f6e17a8c92e2a5da8bbac52e6..26812abddef188d53387ce06d24b2b4bbd654f97 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/io.h>
 #include <asm/irq.h>
 #include <asm/vtoc.h>
+#include <asm/asm.h>
 
 #include "dasd_int.h"
 #include "dasd_diag.h"
@@ -67,22 +68,24 @@ static const u8 DASD_DIAG_CMS1[] = { 0xc3, 0xd4, 0xe2, 0xf1 };/* EBCDIC CMS1 */
 static inline int __dia250(void *iob, int cmd)
 {
        union register_pair rx = { .even = (unsigned long)iob, };
+       int cc, exception;
        typedef union {
                struct dasd_diag_init_io init_io;
                struct dasd_diag_rw_io rw_io;
        } addr_type;
-       int cc;
 
-       cc = 3;
+       exception = 1;
        asm volatile(
                "       diag    %[rx],%[cmd],0x250\n"
-               "0:     ipm     %[cc]\n"
-               "       srl     %[cc],28\n"
+               "0:     lhi     %[exc],0\n"
                "1:\n"
+               CC_IPM(cc)
                EX_TABLE(0b,1b)
-               : [cc] "+&d" (cc), [rx] "+&d" (rx.pair), "+m" (*(addr_type *)iob)
+               : CC_OUT(cc, cc), [rx] "+d" (rx.pair),
+                 "+m" (*(addr_type *)iob), [exc] "+d" (exception)
                : [cmd] "d" (cmd)
-               : "cc");
+               : CC_CLOBBER);
+       cc = exception ? 3 : CC_TRANSFORM(cc);
        return cc | rx.odd;
 }