Loading...
1#ifndef __BARRIER_H
2#define __BARRIER_H
3
4#include <asm/compiler.h>
5
6#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
19#define __ASM_SMP_MB "\tmb\n"
20#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
25#define __ASM_SMP_MB
26#define smp_mb() barrier()
27#define smp_rmb() barrier()
28#define smp_wmb() barrier()
29#define smp_read_barrier_depends() do { } while (0)
30#endif
31
32#define set_mb(var, value) \
33do { var = value; mb(); } while (0)
34
35#endif /* __BARRIER_H */
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef __BARRIER_H
3#define __BARRIER_H
4
5#define mb() __asm__ __volatile__("mb": : :"memory")
6#define rmb() __asm__ __volatile__("mb": : :"memory")
7#define wmb() __asm__ __volatile__("wmb": : :"memory")
8
9#define __smp_load_acquire(p) \
10({ \
11 compiletime_assert_atomic_type(*p); \
12 __READ_ONCE(*p); \
13})
14
15#ifdef CONFIG_SMP
16#define __ASM_SMP_MB "\tmb\n"
17#else
18#define __ASM_SMP_MB
19#endif
20
21#include <asm-generic/barrier.h>
22
23#endif /* __BARRIER_H */