This source file includes following definitions.
- atomic_read
- atomic_set
- atomic_inc
- atomic_dec_and_test
- atomic_cmpxchg
1
2 #ifndef __TOOLS_ASM_GENERIC_ATOMIC_H
3 #define __TOOLS_ASM_GENERIC_ATOMIC_H
4
5 #include <linux/compiler.h>
6 #include <linux/types.h>
7
8
9
10
11
12
13
14
15 #define ATOMIC_INIT(i) { (i) }
16
17
18
19
20
21
22
23 static inline int atomic_read(const atomic_t *v)
24 {
25 return READ_ONCE((v)->counter);
26 }
27
28
29
30
31
32
33
34
35 static inline void atomic_set(atomic_t *v, int i)
36 {
37 v->counter = i;
38 }
39
40
41
42
43
44
45
46 static inline void atomic_inc(atomic_t *v)
47 {
48 __sync_add_and_fetch(&v->counter, 1);
49 }
50
51
52
53
54
55
56
57
58
59 static inline int atomic_dec_and_test(atomic_t *v)
60 {
61 return __sync_sub_and_fetch(&v->counter, 1) == 0;
62 }
63
64 #define cmpxchg(ptr, oldval, newval) \
65 __sync_val_compare_and_swap(ptr, oldval, newval)
66
67 static inline int atomic_cmpxchg(atomic_t *v, int oldval, int newval)
68 {
69 return cmpxchg(&(v)->counter, oldval, newval);
70 }
71
72 #endif