s390/diag: use register pair instead of register asm
authorHeiko Carstens <hca@linux.ibm.com>
Wed, 9 Jun 2021 20:59:13 +0000 (22:59 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Fri, 18 Jun 2021 14:41:21 +0000 (16:41 +0200)
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/kernel/diag.c

index b8b0cd7..a3f4746 100644 (file)
@@ -141,16 +141,15 @@ EXPORT_SYMBOL(diag14);
 
 static inline int __diag204(unsigned long *subcode, unsigned long size, void *addr)
 {
-       register unsigned long _subcode asm("0") = *subcode;
-       register unsigned long _size asm("1") = size;
+       union register_pair rp = { .even = *subcode, .odd = size };
 
        asm volatile(
-               "       diag    %2,%0,0x204\n"
+               "       diag    %[addr],%[rp],0x204\n"
                "0:     nopr    %%r7\n"
                EX_TABLE(0b,0b)
-               : "+d" (_subcode), "+d" (_size) : "d" (addr) : "memory");
-       *subcode = _subcode;
-       return _size;
+               : [rp] "+&d" (rp.pair) : [addr] "d" (addr) : "memory");
+       *subcode = rp.even;
+       return rp.odd;
 }
 
 int diag204(unsigned long subcode, unsigned long size, void *addr)