metag: define __smp_xxx
authorMichael S. Tsirkin <mst@redhat.com>
Sun, 27 Dec 2015 13:04:42 +0000 (15:04 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 12 Jan 2016 18:46:55 +0000 (20:46 +0200)
This defines __smp_xxx barriers for metag,
for use by virtualization.

smp_xxx barriers are removed as they are
defined correctly by asm-generic/barriers.h

Note: as __smp_XX macros should not depend on CONFIG_SMP, they can not
use the existing fence() macro since that is defined differently between
SMP and !SMP.  For this reason, this patch introduces a wrapper
metag_fence() that doesn't depend on CONFIG_SMP.
fence() is then defined using that, depending on CONFIG_SMP.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: James Hogan <james.hogan@imgtec.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
arch/metag/include/asm/barrier.h

index b5b778bb0b33a09bba089b3169e724c0d7125d27..5418517aa5eb35fdec4ab71656ff9daa5fc379f9 100644 (file)
@@ -44,13 +44,6 @@ static inline void wr_fence(void)
 #define rmb()          barrier()
 #define wmb()          mb()
 
-#ifndef CONFIG_SMP
-#define fence()                do { } while (0)
-#define smp_mb()        barrier()
-#define smp_rmb()       barrier()
-#define smp_wmb()       barrier()
-#else
-
 #ifdef CONFIG_METAG_SMP_WRITE_REORDERING
 /*
  * Write to the atomic memory unlock system event register (command 0). This is
@@ -60,26 +53,31 @@ static inline void wr_fence(void)
  * incoherence). It is therefore ineffective if used after and on the same
  * thread as a write.
  */
-static inline void fence(void)
+static inline void metag_fence(void)
 {
        volatile int *flushptr = (volatile int *) LINSYSEVENT_WR_ATOMIC_UNLOCK;
        barrier();
        *flushptr = 0;
        barrier();
 }
-#define smp_mb()        fence()
-#define smp_rmb()       fence()
-#define smp_wmb()       barrier()
+#define __smp_mb()     metag_fence()
+#define __smp_rmb()    metag_fence()
+#define __smp_wmb()    barrier()
 #else
-#define fence()                do { } while (0)
-#define smp_mb()        barrier()
-#define smp_rmb()       barrier()
-#define smp_wmb()       barrier()
+#define metag_fence()  do { } while (0)
+#define __smp_mb()     barrier()
+#define __smp_rmb()    barrier()
+#define __smp_wmb()    barrier()
 #endif
+
+#ifdef CONFIG_SMP
+#define fence()                metag_fence()
+#else
+#define fence()                do { } while (0)
 #endif
 
-#define smp_mb__before_atomic()        barrier()
-#define smp_mb__after_atomic() barrier()
+#define __smp_mb__before_atomic()      barrier()
+#define __smp_mb__after_atomic()       barrier()
 
 #include <asm-generic/barrier.h>