s390/pfault: cleanup inline assemblies
authorHeiko Carstens <hca@linux.ibm.com>
Mon, 24 Jul 2023 15:20:30 +0000 (17:20 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Sat, 29 Jul 2023 12:57:18 +0000 (14:57 +0200)
Cleanup the pfault inline assemblies:
- Use symbolic names for operands
- Add extra linebreaks, and whitespace to improve readability

In addition, change __pfault_init() to return -EOPNOTSUPP in case of
an exception, and don't return a made up valid diag 258 return value
(aka "8").
This allows to simplify the inline assembly, and makes debugging
easier, in case something is broken.

Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/include/asm/pfault.h
arch/s390/mm/pfault.c

index beabeebf2859f60e12f70c68c511aac773c3620f..a1bee4a1e470e6d05ecc88eceeef130af10c8812 100644 (file)
@@ -5,6 +5,8 @@
 #ifndef _ASM_S390_PFAULT_H
 #define _ASM_S390_PFAULT_H
 
+#include <linux/errno.h>
+
 int __pfault_init(void);
 void __pfault_fini(void);
 
@@ -12,7 +14,7 @@ static inline int pfault_init(void)
 {
        if (IS_ENABLED(CONFIG_PFAULT))
                return __pfault_init();
-       return -1;
+       return -EOPNOTSUPP;
 }
 
 static inline void pfault_fini(void)
index 64cc42d37c8bfb4d71a6e42659c6839b46186ff4..1d65512c3351a4abad0a4dcc602481a11f4c3290 100644 (file)
@@ -51,20 +51,19 @@ static struct pfault_refbk pfault_init_refbk = {
 
 int __pfault_init(void)
 {
-        int rc;
+       int rc = -EOPNOTSUPP;
 
        if (pfault_disable)
-               return -1;
+               return rc;
        diag_stat_inc(DIAG_STAT_X258);
        asm volatile(
-               "       diag    %1,%0,0x258\n"
-               "0:     j       2f\n"
-               "1:     la      %0,8\n"
-               "2:\n"
-               EX_TABLE(0b,1b)
-               : "=d" (rc)
-               : "a" (&pfault_init_refbk), "m" (pfault_init_refbk) : "cc");
-        return rc;
+               "       diag    %[refbk],%[rc],0x258\n"
+               "0:     nopr    %%r7\n"
+               EX_TABLE(0b, 0b)
+               : [rc] "+d" (rc)
+               : [refbk] "a" (&pfault_init_refbk), "m" (pfault_init_refbk)
+               : "cc");
+       return rc;
 }
 
 static struct pfault_refbk pfault_fini_refbk = {
@@ -76,15 +75,16 @@ static struct pfault_refbk pfault_fini_refbk = {
 
 void __pfault_fini(void)
 {
-
        if (pfault_disable)
                return;
        diag_stat_inc(DIAG_STAT_X258);
        asm volatile(
-               "       diag    %0,0,0x258\n"
+               "       diag    %[refbk],0,0x258\n"
                "0:     nopr    %%r7\n"
-               EX_TABLE(0b,0b)
-               : : "a" (&pfault_fini_refbk), "m" (pfault_fini_refbk) : "cc");
+               EX_TABLE(0b, 0b)
+               :
+               : [refbk] "a" (&pfault_fini_refbk), "m" (pfault_fini_refbk)
+               : "cc");
 }
 
 static DEFINE_SPINLOCK(pfault_lock);