]> Pileus Git - ~andy/linux/commitdiff
s390/bitops: fix inline assembly constraints
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Tue, 20 Aug 2013 06:24:29 +0000 (08:24 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 22 Aug 2013 10:20:10 +0000 (12:20 +0200)
Fix inline assembly contraints for non atomic bitops functions.

This is broken since 2.6.34 987bcdac "[S390] use inline assembly
contraints available with gcc 3.3.3".

Reported-by: Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Reported-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/bitops.h

index 7d46767587337c3874bd61c43e01a0a72f965303..10135a38673c04894c69e36ee244a756ec28d30e 100644 (file)
@@ -216,7 +216,7 @@ static inline void __set_bit(unsigned long nr, volatile unsigned long *ptr)
        addr = (unsigned long) ptr + ((nr ^ (BITS_PER_LONG - 8)) >> 3);
        asm volatile(
                "       oc      %O0(1,%R0),%1"
-               : "=Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) : "cc" );
+               : "+Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) : "cc");
 }
 
 static inline void 
@@ -244,7 +244,7 @@ __clear_bit(unsigned long nr, volatile unsigned long *ptr)
        addr = (unsigned long) ptr + ((nr ^ (BITS_PER_LONG - 8)) >> 3);
        asm volatile(
                "       nc      %O0(1,%R0),%1"
-               : "=Q" (*(char *) addr) : "Q" (_ni_bitmap[nr & 7]) : "cc" );
+               : "+Q" (*(char *) addr) : "Q" (_ni_bitmap[nr & 7]) : "cc");
 }
 
 static inline void 
@@ -271,7 +271,7 @@ static inline void __change_bit(unsigned long nr, volatile unsigned long *ptr)
        addr = (unsigned long) ptr + ((nr ^ (BITS_PER_LONG - 8)) >> 3);
        asm volatile(
                "       xc      %O0(1,%R0),%1"
-               : "=Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) : "cc" );
+               : "+Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) : "cc");
 }
 
 static inline void 
@@ -301,7 +301,7 @@ test_and_set_bit_simple(unsigned long nr, volatile unsigned long *ptr)
        ch = *(unsigned char *) addr;
        asm volatile(
                "       oc      %O0(1,%R0),%1"
-               : "=Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7])
+               : "+Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7])
                : "cc", "memory");
        return (ch >> (nr & 7)) & 1;
 }
@@ -320,7 +320,7 @@ test_and_clear_bit_simple(unsigned long nr, volatile unsigned long *ptr)
        ch = *(unsigned char *) addr;
        asm volatile(
                "       nc      %O0(1,%R0),%1"
-               : "=Q" (*(char *) addr) : "Q" (_ni_bitmap[nr & 7])
+               : "+Q" (*(char *) addr) : "Q" (_ni_bitmap[nr & 7])
                : "cc", "memory");
        return (ch >> (nr & 7)) & 1;
 }
@@ -339,7 +339,7 @@ test_and_change_bit_simple(unsigned long nr, volatile unsigned long *ptr)
        ch = *(unsigned char *) addr;
        asm volatile(
                "       xc      %O0(1,%R0),%1"
-               : "=Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7])
+               : "+Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7])
                : "cc", "memory");
        return (ch >> (nr & 7)) & 1;
 }