]> git.karo-electronics.de Git - linux-beck.git/commitdiff
s390/mm: use basic block for essa inline assembly
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Mon, 20 Jun 2016 11:31:55 +0000 (13:31 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 28 Jun 2016 07:32:29 +0000 (09:32 +0200)
Use only simple inline assemblies which consist of a single basic
block if the register asm construct is being used.

Otherwise gcc would generate broken code if the compiler option
--sanitize-coverage=trace-pc would be used.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/mm/page-states.c

index a90d45e9dfb0cbb7b1dce5fb8441a249dc0556c3..3330ea124eec32af519f0a496a471b3732cb2101 100644 (file)
@@ -34,20 +34,25 @@ static int __init cmma(char *str)
 }
 __setup("cmma=", cmma);
 
-void __init cmma_init(void)
+static inline int cmma_test_essa(void)
 {
        register unsigned long tmp asm("0") = 0;
        register int rc asm("1") = -EOPNOTSUPP;
 
-       if (!cmma_flag)
-               return;
        asm volatile(
                "       .insn rrf,0xb9ab0000,%1,%1,0,0\n"
                "0:     la      %0,0\n"
                "1:\n"
                EX_TABLE(0b,1b)
                : "+&d" (rc), "+&d" (tmp));
-       if (rc)
+       return rc;
+}
+
+void __init cmma_init(void)
+{
+       if (!cmma_flag)
+               return;
+       if (cmma_test_essa())
                cmma_flag = 0;
 }