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