Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
barrier.h
Go to the documentation of this file.
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License. See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 2001 Hiroyuki Kondo, Hirokazu Takata, and Hitoshi Yamamoto
7  * Copyright (C) 2004, 2006 Hirokazu Takata <takata at linux-m32r.org>
8  */
9 #ifndef _ASM_M32R_BARRIER_H
10 #define _ASM_M32R_BARRIER_H
11 
12 #define nop() __asm__ __volatile__ ("nop" : : )
13 
14 /*
15  * Memory barrier.
16  *
17  * mb() prevents loads and stores being reordered across this point.
18  * rmb() prevents loads being reordered across this point.
19  * wmb() prevents stores being reordered across this point.
20  */
21 #define mb() barrier()
22 #define rmb() mb()
23 #define wmb() mb()
24 
78 #define read_barrier_depends() do { } while (0)
79 
80 #ifdef CONFIG_SMP
81 #define smp_mb() mb()
82 #define smp_rmb() rmb()
83 #define smp_wmb() wmb()
84 #define smp_read_barrier_depends() read_barrier_depends()
85 #define set_mb(var, value) do { (void) xchg(&var, value); } while (0)
86 #else
87 #define smp_mb() barrier()
88 #define smp_rmb() barrier()
89 #define smp_wmb() barrier()
90 #define smp_read_barrier_depends() do { } while (0)
91 #define set_mb(var, value) do { var = value; barrier(); } while (0)
92 #endif
93 
94 #endif /* _ASM_M32R_BARRIER_H */