Lines Matching defs:v
17 static __always_inline int arch_atomic_read(const atomic_t *v)
23 return __READ_ONCE((v)->counter);
26 static __always_inline void arch_atomic_set(atomic_t *v, int i)
28 __WRITE_ONCE(v->counter, i);
31 static __always_inline void arch_atomic_add(int i, atomic_t *v)
34 : "+m" (v->counter)
38 static __always_inline void arch_atomic_sub(int i, atomic_t *v)
41 : "+m" (v->counter)
45 static __always_inline bool arch_atomic_sub_and_test(int i, atomic_t *v)
47 return GEN_BINARY_RMWcc(LOCK_PREFIX "subl", v->counter, e, "er", i);
51 static __always_inline void arch_atomic_inc(atomic_t *v)
54 : "+m" (v->counter) :: "memory");
58 static __always_inline void arch_atomic_dec(atomic_t *v)
61 : "+m" (v->counter) :: "memory");
65 static __always_inline bool arch_atomic_dec_and_test(atomic_t *v)
67 return GEN_UNARY_RMWcc(LOCK_PREFIX "decl", v->counter, e);
71 static __always_inline bool arch_atomic_inc_and_test(atomic_t *v)
73 return GEN_UNARY_RMWcc(LOCK_PREFIX "incl", v->counter, e);
77 static __always_inline bool arch_atomic_add_negative(int i, atomic_t *v)
79 return GEN_BINARY_RMWcc(LOCK_PREFIX "addl", v->counter, s, "er", i);
83 static __always_inline int arch_atomic_add_return(int i, atomic_t *v)
85 return i + xadd(&v->counter, i);
89 #define arch_atomic_sub_return(i, v) arch_atomic_add_return(-(i), v)
91 static __always_inline int arch_atomic_fetch_add(int i, atomic_t *v)
93 return xadd(&v->counter, i);
97 #define arch_atomic_fetch_sub(i, v) arch_atomic_fetch_add(-(i), v)
99 static __always_inline int arch_atomic_cmpxchg(atomic_t *v, int old, int new)
101 return arch_cmpxchg(&v->counter, old, new);
105 static __always_inline bool arch_atomic_try_cmpxchg(atomic_t *v, int *old, int new)
107 return arch_try_cmpxchg(&v->counter, old, new);
111 static __always_inline int arch_atomic_xchg(atomic_t *v, int new)
113 return arch_xchg(&v->counter, new);
117 static __always_inline void arch_atomic_and(int i, atomic_t *v)
120 : "+m" (v->counter)
125 static __always_inline int arch_atomic_fetch_and(int i, atomic_t *v)
127 int val = arch_atomic_read(v);
129 do { } while (!arch_atomic_try_cmpxchg(v, &val, val & i));
135 static __always_inline void arch_atomic_or(int i, atomic_t *v)
138 : "+m" (v->counter)
143 static __always_inline int arch_atomic_fetch_or(int i, atomic_t *v)
145 int val = arch_atomic_read(v);
147 do { } while (!arch_atomic_try_cmpxchg(v, &val, val | i));
153 static __always_inline void arch_atomic_xor(int i, atomic_t *v)
156 : "+m" (v->counter)
161 static __always_inline int arch_atomic_fetch_xor(int i, atomic_t *v)
163 int val = arch_atomic_read(v);
165 do { } while (!arch_atomic_try_cmpxchg(v, &val, val ^ i));