[patch 17/21] Use different constraint for gcc < 4.1 in bitops.

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Greg KH
Date: Tuesday, February 20, 2007 - 6:38 pm

-stable review patch.  If anyone has any objections, please let us know.

------------------

Use different constraint for gcc < 4.1 in bitops.h

+m is really correct for a RMW instruction, but some older gccs
error out. I finally gave in and ifdefed it.

This fixes compilation errors with some compiler version.

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 include/asm-x86_64/bitops.h |   34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

--- linux-2.6.19.4.orig/include/asm-x86_64/bitops.h
+++ linux-2.6.19.4/include/asm-x86_64/bitops.h
@@ -7,7 +7,13 @@
 
 #include <asm/alternative.h>
 
-#define ADDR (*(volatile long *) addr)
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1)
+/* Technically wrong, but this avoids compilation errors on some gcc
+   versions. */
+#define ADDR "=m" (*(volatile long *) addr)
+#else
+#define ADDR "+m" (*(volatile long *) addr)
+#endif
 
 /**
  * set_bit - Atomically set a bit in memory
@@ -23,7 +29,7 @@ static __inline__ void set_bit(int nr, v
 {
 	__asm__ __volatile__( LOCK_PREFIX
 		"btsl %1,%0"
-		:"+m" (ADDR)
+		:ADDR
 		:"dIr" (nr) : "memory");
 }
 
@@ -40,7 +46,7 @@ static __inline__ void __set_bit(int nr,
 {
 	__asm__ volatile(
 		"btsl %1,%0"
-		:"+m" (ADDR)
+		:ADDR
 		:"dIr" (nr) : "memory");
 }
 
@@ -58,7 +64,7 @@ static __inline__ void clear_bit(int nr,
 {
 	__asm__ __volatile__( LOCK_PREFIX
 		"btrl %1,%0"
-		:"+m" (ADDR)
+		:ADDR
 		:"dIr" (nr));
 }
 
@@ -66,7 +72,7 @@ static __inline__ void __clear_bit(int n
 {
 	__asm__ __volatile__(
 		"btrl %1,%0"
-		:"+m" (ADDR)
+		:ADDR
 		:"dIr" (nr));
 }
 
@@ -86,7 +92,7 @@ static __inline__ void __change_bit(int 
 {
 	__asm__ __volatile__(
 		"btcl %1,%0"
-		:"+m" (ADDR)
+		:ADDR
 		:"dIr" (nr));
 }
 
@@ -103,7 +109,7 @@ static __inline__ void change_bit(int nr
 {
 	__asm__ __volatile__( LOCK_PREFIX
 		"btcl %1,%0"
-		:"+m" (ADDR)
+		:ADDR
 		:"dIr" (nr));
 }
 
@@ -121,7 +127,7 @@ static __inline__ int test_and_set_bit(i
 
 	__asm__ __volatile__( LOCK_PREFIX
 		"btsl %2,%1\n\tsbbl %0,%0"
-		:"=r" (oldbit),"+m" (ADDR)
+		:"=r" (oldbit),ADDR
 		:"dIr" (nr) : "memory");
 	return oldbit;
 }
@@ -141,7 +147,7 @@ static __inline__ int __test_and_set_bit
 
 	__asm__(
 		"btsl %2,%1\n\tsbbl %0,%0"
-		:"=r" (oldbit),"+m" (ADDR)
+		:"=r" (oldbit),ADDR
 		:"dIr" (nr));
 	return oldbit;
 }
@@ -160,7 +166,7 @@ static __inline__ int test_and_clear_bit
 
 	__asm__ __volatile__( LOCK_PREFIX
 		"btrl %2,%1\n\tsbbl %0,%0"
-		:"=r" (oldbit),"+m" (ADDR)
+		:"=r" (oldbit),ADDR
 		:"dIr" (nr) : "memory");
 	return oldbit;
 }
@@ -180,7 +186,7 @@ static __inline__ int __test_and_clear_b
 
 	__asm__(
 		"btrl %2,%1\n\tsbbl %0,%0"
-		:"=r" (oldbit),"+m" (ADDR)
+		:"=r" (oldbit),ADDR
 		:"dIr" (nr));
 	return oldbit;
 }
@@ -192,7 +198,7 @@ static __inline__ int __test_and_change_
 
 	__asm__ __volatile__(
 		"btcl %2,%1\n\tsbbl %0,%0"
-		:"=r" (oldbit),"+m" (ADDR)
+		:"=r" (oldbit),ADDR
 		:"dIr" (nr) : "memory");
 	return oldbit;
 }
@@ -211,7 +217,7 @@ static __inline__ int test_and_change_bi
 
 	__asm__ __volatile__( LOCK_PREFIX
 		"btcl %2,%1\n\tsbbl %0,%0"
-		:"=r" (oldbit),"+m" (ADDR)
+		:"=r" (oldbit),ADDR
 		:"dIr" (nr) : "memory");
 	return oldbit;
 }
@@ -237,7 +243,7 @@ static __inline__ int variable_test_bit(
 	__asm__ __volatile__(
 		"btl %2,%1\n\tsbbl %0,%0"
 		:"=r" (oldbit)
-		:"m" (ADDR),"dIr" (nr));
+		:"m" (*(volatile long *)addr),"dIr" (nr));
 	return oldbit;
 }
 

--
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[patch 00/21] 2.6.19-stable review, Greg KH, (Tue Feb 20, 6:36 pm)
[patch 01/21] V4L: cx88: Fix lockup on suspend, Greg KH, (Tue Feb 20, 6:36 pm)
[patch 03/21] V4L: fix ks0127 status flags, Greg KH, (Tue Feb 20, 6:36 pm)
[patch 12/21] bcm43xx: Fix for oops on resume, Greg KH, (Tue Feb 20, 6:37 pm)
[patch 17/21] Use different constraint for gcc < 4.1 in bi ..., Greg KH, (Tue Feb 20, 6:38 pm)
Re: [patch 00/21] 2.6.19-stable review, Stefan Richter, (Wed Feb 21, 6:36 am)
Re: [patch 00/21] 2.6.19-stable review, Stefan Richter, (Wed Feb 21, 6:37 am)
Re: [patch 00/21] 2.6.19-stable review, Chuck Ebbert, (Wed Feb 21, 9:38 am)
Re: [patch 00/21] 2.6.19-stable review, Chuck Ebbert, (Wed Feb 21, 9:50 am)
Re: [patch 00/21] 2.6.19-stable review, Chuck Ebbert, (Wed Feb 21, 12:31 pm)
Re: [patch 00/21] 2.6.19-stable review, Andrew Morton, (Wed Feb 21, 12:47 pm)
Re: [patch 00/21] 2.6.19-stable review, Linus Torvalds, (Wed Feb 21, 1:09 pm)
Re: [patch 00/21] 2.6.19-stable review, Eric W. Biederman, (Wed Feb 21, 1:13 pm)
Re: [patch 00/21] 2.6.19-stable review, Chuck Ebbert, (Wed Feb 21, 1:21 pm)
Re: [patch 00/21] 2.6.19-stable review, Greg KH, (Wed Feb 21, 1:39 pm)
Re: [patch 00/21] 2.6.19-stable review, Chuck Ebbert, (Wed Feb 21, 1:44 pm)
Re: [patch 00/21] 2.6.19-stable review, Andi Kleen, (Wed Feb 21, 3:19 pm)
Re: [patch 00/21] 2.6.19-stable review, Andi Kleen, (Wed Feb 21, 3:20 pm)
Re: [patch 00/21] 2.6.19-stable review, Chuck Ebbert, (Wed Feb 21, 3:33 pm)
Re: [patch 00/21] 2.6.19-stable review, Chuck Ebbert, (Wed Feb 21, 3:39 pm)
Re: [patch 00/21] 2.6.19-stable review, Chuck Ebbert, (Wed Feb 21, 3:43 pm)
Re: [patch 00/21] 2.6.19-stable review, Eric W. Biederman, (Wed Feb 21, 3:45 pm)
Re: [patch 01/21] V4L: cx88: Fix lockup on suspend, Chuck Ebbert, (Wed Feb 21, 6:00 pm)
Re: [patch 01/21] V4L: cx88: Fix lockup on suspend, Michael Krufky, (Wed Feb 21, 6:14 pm)
Re: [patch 00/21] 2.6.19-stable review, Andi Kleen, (Wed Feb 21, 6:19 pm)
Re: [patch 00/21] 2.6.19-stable review, Chuck Ebbert, (Thu Feb 22, 9:09 am)
Re: [patch 00/21] 2.6.19-stable review, Eric W. Biederman, (Tue Feb 27, 11:37 pm)
Re: [patch 00/21] 2.6.19-stable review, Zwane Mwaikambo, (Wed Feb 28, 1:51 am)
Re: [patch 00/21] 2.6.19-stable review, Eric W. Biederman, (Wed Feb 28, 5:28 am)
Re: [stable] [patch 00/21] 2.6.19-stable review, Greg KH, (Wed Feb 28, 12:52 pm)
Re: [stable] [patch 00/21] 2.6.19-stable review, Eric W. Biederman, (Wed Feb 28, 4:25 pm)
Re: [patch 00/21] 2.6.19-stable review, Adrian Bunk, (Thu Mar 8, 10:35 pm)