add explicit barrier operation to internal atomic.h API
authorRich Felker <dalias@aerifal.cx>
Fri, 10 Oct 2014 22:17:09 +0000 (18:17 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 10 Oct 2014 22:17:09 +0000 (18:17 -0400)
arch/arm/atomic.h
arch/i386/atomic.h
arch/microblaze/atomic.h
arch/mips/atomic.h
arch/or1k/atomic.h
arch/powerpc/atomic.h
arch/sh/atomic.h
arch/x32/atomic.h
arch/x86_64/atomic.h

index 738f528c6316fffa24d141578ccd7eeebdb80ca8..8665c874c045d683499e99bfc35ebc28f2811bfa 100644 (file)
@@ -101,7 +101,9 @@ static inline void a_store(volatile int *p, int x)
        while (__k_cas(*p, x, p));
 }
 
-static inline void a_spin()
+#define a_spin a_barrier
+
+static inline void a_barrier()
 {
        __k_cas(0, 0, &(int){0});
 }
index 8a2a1234f088a2a6332ac6e5f58b425a1c63e498..4fe7bded328befa977a175a54b162be00a1bd6d4 100644 (file)
@@ -96,6 +96,11 @@ static inline void a_spin()
        __asm__ __volatile__( "pause" : : : "memory" );
 }
 
+static inline void a_barrier()
+{
+       __asm__ __volatile__( "" : : : "memory" );
+}
+
 static inline void a_crash()
 {
        __asm__ __volatile__( "hlt" : : : "memory" );
index abb79b53cdf1b5f071abf7bb2c4135373977f1a6..93404b948443596ea1064cb363dd3111ac60cf5d 100644 (file)
@@ -95,7 +95,9 @@ static inline void a_store(volatile int *p, int x)
                : "=m"(*p) : "r"(x) : "memory" );
 }
 
-static inline void a_spin()
+#define a_spin a_barrier
+
+static inline void a_barrier()
 {
        a_cas(&(int){0}, 0, 0);
 }
index cc5bf498d1f5a507bb4181845c21d71d99889dfe..c82046a81aaefcdbe6361c901755ef687867e274 100644 (file)
@@ -135,7 +135,9 @@ static inline void a_store(volatile int *p, int x)
                : "+m"(*p) : "r"(x) : "memory" );
 }
 
-static inline void a_spin()
+#define a_spin a_barrier
+
+static inline void a_barrier()
 {
        a_cas(&(int){0}, 0, 0);
 }
index f9e698153c925eb1f3e38f02f94b41823b1da2fe..640ff4307a4ee8f05a6fae92f49214439e6f198c 100644 (file)
@@ -72,7 +72,9 @@ static inline void a_store(volatile int *p, int x)
        a_swap(p, x);
 }
 
-static inline void a_spin()
+#define a_spin a_barrier
+
+static inline void a_barrier()
 {
        a_cas(&(int){0}, 0, 0);
 }
index 1c50361e3e8e269ce29b8205de1e1181c2ab443c..f706543a7fac6d682b76f47e720b46540163fbde 100644 (file)
@@ -78,7 +78,9 @@ static inline void a_store(volatile int *p, int x)
                : "=m"(*p) : "r"(x) : "memory" );
 }
 
-static inline void a_spin()
+#define a_spin a_barrier
+
+static inline void a_barrier()
 {
        a_cas(&(int){0}, 0, 0);
 }
index b95bbffccb021c911bd01dc8a876a8a3899528ba..a1d22e4a1df1671083fb2dd80e007618bb098fb4 100644 (file)
@@ -51,7 +51,9 @@ static inline void a_dec(volatile int *x)
        a_fetch_add(x, -1);
 }
 
-static inline void a_spin()
+#define a_spin a_barrier
+
+static inline void a_barrier()
 {
        a_cas(&(int){0}, 0, 0);
 }
index ae0a576c11e0fd2ab4cdb8c9e3c8b3b255a04d27..333098c399e95d065f51f9f9628663a906e7c887 100644 (file)
@@ -91,6 +91,11 @@ static inline void a_spin()
        __asm__ __volatile__( "pause" : : : "memory" );
 }
 
+static inline void a_barrier()
+{
+       __asm__ __volatile__( "" : : : "memory" );
+}
+
 static inline void a_crash()
 {
        __asm__ __volatile__( "hlt" : : : "memory" );
index ae0a576c11e0fd2ab4cdb8c9e3c8b3b255a04d27..333098c399e95d065f51f9f9628663a906e7c887 100644 (file)
@@ -91,6 +91,11 @@ static inline void a_spin()
        __asm__ __volatile__( "pause" : : : "memory" );
 }
 
+static inline void a_barrier()
+{
+       __asm__ __volatile__( "" : : : "memory" );
+}
+
 static inline void a_crash()
 {
        __asm__ __volatile__( "hlt" : : : "memory" );