Commit afc22de0 authored by Michael S. Tsirkin's avatar Michael S. Tsirkin

metag: define __smp_xxx

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: default avatarMichael S. Tsirkin <mst@redhat.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Acked-by: default avatarJames Hogan <james.hogan@imgtec.com>
Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
parent eebd1b92
...@@ -44,13 +44,6 @@ static inline void wr_fence(void) ...@@ -44,13 +44,6 @@ static inline void wr_fence(void)
#define rmb() barrier() #define rmb() barrier()
#define wmb() mb() #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 #ifdef CONFIG_METAG_SMP_WRITE_REORDERING
/* /*
* Write to the atomic memory unlock system event register (command 0). This is * Write to the atomic memory unlock system event register (command 0). This is
...@@ -60,26 +53,31 @@ static inline void wr_fence(void) ...@@ -60,26 +53,31 @@ static inline void wr_fence(void)
* incoherence). It is therefore ineffective if used after and on the same * incoherence). It is therefore ineffective if used after and on the same
* thread as a write. * thread as a write.
*/ */
static inline void fence(void) static inline void metag_fence(void)
{ {
volatile int *flushptr = (volatile int *) LINSYSEVENT_WR_ATOMIC_UNLOCK; volatile int *flushptr = (volatile int *) LINSYSEVENT_WR_ATOMIC_UNLOCK;
barrier(); barrier();
*flushptr = 0; *flushptr = 0;
barrier(); barrier();
} }
#define smp_mb() fence() #define __smp_mb() metag_fence()
#define smp_rmb() fence() #define __smp_rmb() metag_fence()
#define smp_wmb() barrier() #define __smp_wmb() barrier()
#else #else
#define fence() do { } while (0) #define metag_fence() do { } while (0)
#define smp_mb() barrier() #define __smp_mb() barrier()
#define smp_rmb() barrier() #define __smp_rmb() barrier()
#define smp_wmb() barrier() #define __smp_wmb() barrier()
#endif #endif
#ifdef CONFIG_SMP
#define fence() metag_fence()
#else
#define fence() do { } while (0)
#endif #endif
#define smp_mb__before_atomic() barrier() #define __smp_mb__before_atomic() barrier()
#define smp_mb__after_atomic() barrier() #define __smp_mb__after_atomic() barrier()
#include <asm-generic/barrier.h> #include <asm-generic/barrier.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment