Skip to content

Commit

Permalink
metag: define __smp_xxx
Browse files Browse the repository at this point in the history
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 <[email protected]>
Acked-by: Arnd Bergmann <[email protected]>
Acked-by: James Hogan <[email protected]>
Acked-by: Peter Zijlstra (Intel) <[email protected]>
  • Loading branch information
mstsirkin committed Jan 12, 2016
1 parent eebd1b9 commit afc22de
Showing 1 changed file with 15 additions and 17 deletions.
32 changes: 15 additions & 17 deletions arch/metag/include/asm/barrier.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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>

Expand Down

0 comments on commit afc22de

Please sign in to comment.