blob: ce8860a0b32db64bf0b8f8663717fd30df635b05 [file] [log] [blame]
Andrew Morton0db9ae42005-10-24 23:05:58 -07001#ifndef __BARRIER_H
2#define __BARRIER_H
3
Ivan Kokshaysky63f324c2005-10-29 18:15:43 -07004#include <asm/compiler.h>
5
Andrew Morton0db9ae42005-10-24 23:05:58 -07006#define mb() \
7__asm__ __volatile__("mb": : :"memory")
8
9#define rmb() \
10__asm__ __volatile__("mb": : :"memory")
11
12#define wmb() \
13__asm__ __volatile__("wmb": : :"memory")
14
15#define read_barrier_depends() \
16__asm__ __volatile__("mb": : :"memory")
17
18#ifdef CONFIG_SMP
Ivan Kokshaysky77b4cf52009-04-30 15:08:48 -070019#define __ASM_SMP_MB "\tmb\n"
Andrew Morton0db9ae42005-10-24 23:05:58 -070020#define smp_mb() mb()
21#define smp_rmb() rmb()
22#define smp_wmb() wmb()
23#define smp_read_barrier_depends() read_barrier_depends()
24#else
Ivan Kokshaysky77b4cf52009-04-30 15:08:48 -070025#define __ASM_SMP_MB
Andrew Morton0db9ae42005-10-24 23:05:58 -070026#define smp_mb() barrier()
27#define smp_rmb() barrier()
28#define smp_wmb() barrier()
Nick Piggin73f10282008-05-14 06:35:11 +020029#define smp_read_barrier_depends() do { } while (0)
Andrew Morton0db9ae42005-10-24 23:05:58 -070030#endif
31
32#define set_mb(var, value) \
33do { var = value; mb(); } while (0)
34
Andrew Morton0db9ae42005-10-24 23:05:58 -070035#endif /* __BARRIER_H */