diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2013-08-20 02:24:29 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-08-22 06:20:10 -0400 |
commit | 02aff3aa1772c63d82e1f160d7b60db1f9649f43 (patch) | |
tree | 1b368fbe15fe0b329b5baae948f58dfd282ae8a0 /arch/s390 | |
parent | 558b9ef00e128b2c97df6e4243152af3d0da3653 (diff) |
s390/bitops: fix inline assembly constraints
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>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/include/asm/bitops.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/s390/include/asm/bitops.h b/arch/s390/include/asm/bitops.h index 7d4676758733..10135a38673c 100644 --- a/arch/s390/include/asm/bitops.h +++ b/arch/s390/include/asm/bitops.h | |||
@@ -216,7 +216,7 @@ static inline void __set_bit(unsigned long nr, volatile unsigned long *ptr) | |||
216 | addr = (unsigned long) ptr + ((nr ^ (BITS_PER_LONG - 8)) >> 3); | 216 | addr = (unsigned long) ptr + ((nr ^ (BITS_PER_LONG - 8)) >> 3); |
217 | asm volatile( | 217 | asm volatile( |
218 | " oc %O0(1,%R0),%1" | 218 | " oc %O0(1,%R0),%1" |
219 | : "=Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) : "cc" ); | 219 | : "+Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) : "cc"); |
220 | } | 220 | } |
221 | 221 | ||
222 | static inline void | 222 | static inline void |
@@ -244,7 +244,7 @@ __clear_bit(unsigned long nr, volatile unsigned long *ptr) | |||
244 | addr = (unsigned long) ptr + ((nr ^ (BITS_PER_LONG - 8)) >> 3); | 244 | addr = (unsigned long) ptr + ((nr ^ (BITS_PER_LONG - 8)) >> 3); |
245 | asm volatile( | 245 | asm volatile( |
246 | " nc %O0(1,%R0),%1" | 246 | " nc %O0(1,%R0),%1" |
247 | : "=Q" (*(char *) addr) : "Q" (_ni_bitmap[nr & 7]) : "cc" ); | 247 | : "+Q" (*(char *) addr) : "Q" (_ni_bitmap[nr & 7]) : "cc"); |
248 | } | 248 | } |
249 | 249 | ||
250 | static inline void | 250 | static inline void |
@@ -271,7 +271,7 @@ static inline void __change_bit(unsigned long nr, volatile unsigned long *ptr) | |||
271 | addr = (unsigned long) ptr + ((nr ^ (BITS_PER_LONG - 8)) >> 3); | 271 | addr = (unsigned long) ptr + ((nr ^ (BITS_PER_LONG - 8)) >> 3); |
272 | asm volatile( | 272 | asm volatile( |
273 | " xc %O0(1,%R0),%1" | 273 | " xc %O0(1,%R0),%1" |
274 | : "=Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) : "cc" ); | 274 | : "+Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) : "cc"); |
275 | } | 275 | } |
276 | 276 | ||
277 | static inline void | 277 | static inline void |
@@ -301,7 +301,7 @@ test_and_set_bit_simple(unsigned long nr, volatile unsigned long *ptr) | |||
301 | ch = *(unsigned char *) addr; | 301 | ch = *(unsigned char *) addr; |
302 | asm volatile( | 302 | asm volatile( |
303 | " oc %O0(1,%R0),%1" | 303 | " oc %O0(1,%R0),%1" |
304 | : "=Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) | 304 | : "+Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) |
305 | : "cc", "memory"); | 305 | : "cc", "memory"); |
306 | return (ch >> (nr & 7)) & 1; | 306 | return (ch >> (nr & 7)) & 1; |
307 | } | 307 | } |
@@ -320,7 +320,7 @@ test_and_clear_bit_simple(unsigned long nr, volatile unsigned long *ptr) | |||
320 | ch = *(unsigned char *) addr; | 320 | ch = *(unsigned char *) addr; |
321 | asm volatile( | 321 | asm volatile( |
322 | " nc %O0(1,%R0),%1" | 322 | " nc %O0(1,%R0),%1" |
323 | : "=Q" (*(char *) addr) : "Q" (_ni_bitmap[nr & 7]) | 323 | : "+Q" (*(char *) addr) : "Q" (_ni_bitmap[nr & 7]) |
324 | : "cc", "memory"); | 324 | : "cc", "memory"); |
325 | return (ch >> (nr & 7)) & 1; | 325 | return (ch >> (nr & 7)) & 1; |
326 | } | 326 | } |
@@ -339,7 +339,7 @@ test_and_change_bit_simple(unsigned long nr, volatile unsigned long *ptr) | |||
339 | ch = *(unsigned char *) addr; | 339 | ch = *(unsigned char *) addr; |
340 | asm volatile( | 340 | asm volatile( |
341 | " xc %O0(1,%R0),%1" | 341 | " xc %O0(1,%R0),%1" |
342 | : "=Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) | 342 | : "+Q" (*(char *) addr) : "Q" (_oi_bitmap[nr & 7]) |
343 | : "cc", "memory"); | 343 | : "cc", "memory"); |
344 | return (ch >> (nr & 7)) & 1; | 344 | return (ch >> (nr & 7)) & 1; |
345 | } | 345 | } |