Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: 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>

+16 -18
+16 -18
arch/metag/include/asm/barrier.h
··· 44 44 #define rmb() barrier() 45 45 #define wmb() mb() 46 46 47 - #ifndef CONFIG_SMP 48 - #define fence() do { } while (0) 49 - #define smp_mb() barrier() 50 - #define smp_rmb() barrier() 51 - #define smp_wmb() barrier() 52 - #else 53 - 54 47 #ifdef CONFIG_METAG_SMP_WRITE_REORDERING 55 48 /* 56 49 * Write to the atomic memory unlock system event register (command 0). This is ··· 53 60 * incoherence). It is therefore ineffective if used after and on the same 54 61 * thread as a write. 55 62 */ 56 - static inline void fence(void) 63 + static inline void metag_fence(void) 57 64 { 58 65 volatile int *flushptr = (volatile int *) LINSYSEVENT_WR_ATOMIC_UNLOCK; 59 66 barrier(); 60 67 *flushptr = 0; 61 68 barrier(); 62 69 } 63 - #define smp_mb() fence() 64 - #define smp_rmb() fence() 65 - #define smp_wmb() barrier() 70 + #define __smp_mb() metag_fence() 71 + #define __smp_rmb() metag_fence() 72 + #define __smp_wmb() barrier() 66 73 #else 67 - #define fence() do { } while (0) 68 - #define smp_mb() barrier() 69 - #define smp_rmb() barrier() 70 - #define smp_wmb() barrier() 71 - #endif 74 + #define metag_fence() do { } while (0) 75 + #define __smp_mb() barrier() 76 + #define __smp_rmb() barrier() 77 + #define __smp_wmb() barrier() 72 78 #endif 73 79 74 - #define smp_mb__before_atomic() barrier() 75 - #define smp_mb__after_atomic() barrier() 80 + #ifdef CONFIG_SMP 81 + #define fence() metag_fence() 82 + #else 83 + #define fence() do { } while (0) 84 + #endif 85 + 86 + #define __smp_mb__before_atomic() barrier() 87 + #define __smp_mb__after_atomic() barrier() 76 88 77 89 #include <asm-generic/barrier.h> 78 90