[PATCH] ARM SMP: __xchg support
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Tue, 28 Jun 2005 18:22:25 +0000 (19:22 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 28 Jun 2005 18:22:25 +0000 (19:22 +0100)
This enables the existing __xchg implementation to be used on SMP.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
include/asm-arm/system.h

index 3d0d2860b6db103c3969f60d4cf06975304032d8..cdf49f442fd220db66c2864e3fd6c14168b470ce 100644 (file)
@@ -290,7 +290,6 @@ do {                                                                        \
 })
 
 #ifdef CONFIG_SMP
-#error SMP not supported
 
 #define smp_mb()               mb()
 #define smp_rmb()              rmb()
@@ -304,6 +303,8 @@ do {                                                                        \
 #define smp_wmb()              barrier()
 #define smp_read_barrier_depends()             do { } while(0)
 
+#endif /* CONFIG_SMP */
+
 #if defined(CONFIG_CPU_SA1100) || defined(CONFIG_CPU_SA110)
 /*
  * On the StrongARM, "swp" is terminally broken since it bypasses the
@@ -316,9 +317,16 @@ do {                                                                       \
  *
  * We choose (1) since its the "easiest" to achieve here and is not
  * dependent on the processor type.
+ *
+ * NOTE that this solution won't work on an SMP system, so explcitly
+ * forbid it here.
  */
+#ifdef CONFIG_SMP
+#error SMP is not supported on SA1100/SA110
+#else
 #define swp_is_buggy
 #endif
+#endif
 
 static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size)
 {
@@ -361,8 +369,6 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size
        return ret;
 }
 
-#endif /* CONFIG_SMP */
-
 #endif /* __ASSEMBLY__ */
 
 #define arch_align_stack(x) (x)