| .. | .. | 
|---|
| 14 | 14 |   * resource counting etc.. | 
|---|
| 15 | 15 |   */ | 
|---|
| 16 | 16 |   | 
|---|
| 17 |  | -#define ATOMIC_INIT(i)	{ (i) }  | 
|---|
| 18 |  | -  | 
|---|
| 19 | 17 |  /** | 
|---|
| 20 | 18 |   * arch_atomic_read - read atomic variable | 
|---|
| 21 | 19 |   * @v: pointer of type atomic_t | 
|---|
| .. | .. | 
|---|
| 28 | 26 |  	 * Note for KASAN: we deliberately don't use READ_ONCE_NOCHECK() here, | 
|---|
| 29 | 27 |  	 * it's non-inlined function that increases binary size and stack usage. | 
|---|
| 30 | 28 |  	 */ | 
|---|
| 31 |  | -	return READ_ONCE((v)->counter);  | 
|---|
 | 29 | +	return __READ_ONCE((v)->counter);  | 
|---|
| 32 | 30 |  } | 
|---|
| 33 | 31 |   | 
|---|
| 34 | 32 |  /** | 
|---|
| .. | .. | 
|---|
| 40 | 38 |   */ | 
|---|
| 41 | 39 |  static __always_inline void arch_atomic_set(atomic_t *v, int i) | 
|---|
| 42 | 40 |  { | 
|---|
| 43 |  | -	WRITE_ONCE(v->counter, i);  | 
|---|
 | 41 | +	__WRITE_ONCE(v->counter, i);  | 
|---|
| 44 | 42 |  } | 
|---|
| 45 | 43 |   | 
|---|
| 46 | 44 |  /** | 
|---|
| .. | .. | 
|---|
| 82 | 80 |   */ | 
|---|
| 83 | 81 |  static __always_inline bool arch_atomic_sub_and_test(int i, atomic_t *v) | 
|---|
| 84 | 82 |  { | 
|---|
| 85 |  | -	GEN_BINARY_RMWcc(LOCK_PREFIX "subl", v->counter, "er", i, "%0", e);  | 
|---|
 | 83 | +	return GEN_BINARY_RMWcc(LOCK_PREFIX "subl", v->counter, e, "er", i);  | 
|---|
| 86 | 84 |  } | 
|---|
| 87 | 85 |  #define arch_atomic_sub_and_test arch_atomic_sub_and_test | 
|---|
| 88 | 86 |   | 
|---|
| .. | .. | 
|---|
| 122 | 120 |   */ | 
|---|
| 123 | 121 |  static __always_inline bool arch_atomic_dec_and_test(atomic_t *v) | 
|---|
| 124 | 122 |  { | 
|---|
| 125 |  | -	GEN_UNARY_RMWcc(LOCK_PREFIX "decl", v->counter, "%0", e);  | 
|---|
 | 123 | +	return GEN_UNARY_RMWcc(LOCK_PREFIX "decl", v->counter, e);  | 
|---|
| 126 | 124 |  } | 
|---|
| 127 | 125 |  #define arch_atomic_dec_and_test arch_atomic_dec_and_test | 
|---|
| 128 | 126 |   | 
|---|
| .. | .. | 
|---|
| 136 | 134 |   */ | 
|---|
| 137 | 135 |  static __always_inline bool arch_atomic_inc_and_test(atomic_t *v) | 
|---|
| 138 | 136 |  { | 
|---|
| 139 |  | -	GEN_UNARY_RMWcc(LOCK_PREFIX "incl", v->counter, "%0", e);  | 
|---|
 | 137 | +	return GEN_UNARY_RMWcc(LOCK_PREFIX "incl", v->counter, e);  | 
|---|
| 140 | 138 |  } | 
|---|
| 141 | 139 |  #define arch_atomic_inc_and_test arch_atomic_inc_and_test | 
|---|
| 142 | 140 |   | 
|---|
| .. | .. | 
|---|
| 151 | 149 |   */ | 
|---|
| 152 | 150 |  static __always_inline bool arch_atomic_add_negative(int i, atomic_t *v) | 
|---|
| 153 | 151 |  { | 
|---|
| 154 |  | -	GEN_BINARY_RMWcc(LOCK_PREFIX "addl", v->counter, "er", i, "%0", s);  | 
|---|
 | 152 | +	return GEN_BINARY_RMWcc(LOCK_PREFIX "addl", v->counter, s, "er", i);  | 
|---|
| 155 | 153 |  } | 
|---|
| 156 | 154 |  #define arch_atomic_add_negative arch_atomic_add_negative | 
|---|
| 157 | 155 |   | 
|---|
| .. | .. | 
|---|
| 166 | 164 |  { | 
|---|
| 167 | 165 |  	return i + xadd(&v->counter, i); | 
|---|
| 168 | 166 |  } | 
|---|
 | 167 | +#define arch_atomic_add_return arch_atomic_add_return  | 
|---|
| 169 | 168 |   | 
|---|
| 170 | 169 |  /** | 
|---|
| 171 | 170 |   * arch_atomic_sub_return - subtract integer and return | 
|---|
| .. | .. | 
|---|
| 178 | 177 |  { | 
|---|
| 179 | 178 |  	return arch_atomic_add_return(-i, v); | 
|---|
| 180 | 179 |  } | 
|---|
 | 180 | +#define arch_atomic_sub_return arch_atomic_sub_return  | 
|---|
| 181 | 181 |   | 
|---|
| 182 | 182 |  static __always_inline int arch_atomic_fetch_add(int i, atomic_t *v) | 
|---|
| 183 | 183 |  { | 
|---|
| 184 | 184 |  	return xadd(&v->counter, i); | 
|---|
| 185 | 185 |  } | 
|---|
 | 186 | +#define arch_atomic_fetch_add arch_atomic_fetch_add  | 
|---|
| 186 | 187 |   | 
|---|
| 187 | 188 |  static __always_inline int arch_atomic_fetch_sub(int i, atomic_t *v) | 
|---|
| 188 | 189 |  { | 
|---|
| 189 | 190 |  	return xadd(&v->counter, -i); | 
|---|
| 190 | 191 |  } | 
|---|
 | 192 | +#define arch_atomic_fetch_sub arch_atomic_fetch_sub  | 
|---|
| 191 | 193 |   | 
|---|
| 192 | 194 |  static __always_inline int arch_atomic_cmpxchg(atomic_t *v, int old, int new) | 
|---|
| 193 | 195 |  { | 
|---|
| 194 | 196 |  	return arch_cmpxchg(&v->counter, old, new); | 
|---|
| 195 | 197 |  } | 
|---|
 | 198 | +#define arch_atomic_cmpxchg arch_atomic_cmpxchg  | 
|---|
| 196 | 199 |   | 
|---|
| 197 |  | -#define arch_atomic_try_cmpxchg arch_atomic_try_cmpxchg  | 
|---|
| 198 | 200 |  static __always_inline bool arch_atomic_try_cmpxchg(atomic_t *v, int *old, int new) | 
|---|
| 199 | 201 |  { | 
|---|
| 200 | 202 |  	return try_cmpxchg(&v->counter, old, new); | 
|---|
| 201 | 203 |  } | 
|---|
 | 204 | +#define arch_atomic_try_cmpxchg arch_atomic_try_cmpxchg  | 
|---|
| 202 | 205 |   | 
|---|
| 203 |  | -static inline int arch_atomic_xchg(atomic_t *v, int new)  | 
|---|
 | 206 | +static __always_inline int arch_atomic_xchg(atomic_t *v, int new)  | 
|---|
| 204 | 207 |  { | 
|---|
| 205 | 208 |  	return arch_xchg(&v->counter, new); | 
|---|
| 206 | 209 |  } | 
|---|
 | 210 | +#define arch_atomic_xchg arch_atomic_xchg  | 
|---|
| 207 | 211 |   | 
|---|
| 208 |  | -static inline void arch_atomic_and(int i, atomic_t *v)  | 
|---|
 | 212 | +static __always_inline void arch_atomic_and(int i, atomic_t *v)  | 
|---|
| 209 | 213 |  { | 
|---|
| 210 | 214 |  	asm volatile(LOCK_PREFIX "andl %1,%0" | 
|---|
| 211 | 215 |  			: "+m" (v->counter) | 
|---|
| .. | .. | 
|---|
| 213 | 217 |  			: "memory"); | 
|---|
| 214 | 218 |  } | 
|---|
| 215 | 219 |   | 
|---|
| 216 |  | -static inline int arch_atomic_fetch_and(int i, atomic_t *v)  | 
|---|
 | 220 | +static __always_inline int arch_atomic_fetch_and(int i, atomic_t *v)  | 
|---|
| 217 | 221 |  { | 
|---|
| 218 | 222 |  	int val = arch_atomic_read(v); | 
|---|
| 219 | 223 |   | 
|---|
| .. | .. | 
|---|
| 221 | 225 |   | 
|---|
| 222 | 226 |  	return val; | 
|---|
| 223 | 227 |  } | 
|---|
 | 228 | +#define arch_atomic_fetch_and arch_atomic_fetch_and  | 
|---|
| 224 | 229 |   | 
|---|
| 225 |  | -static inline void arch_atomic_or(int i, atomic_t *v)  | 
|---|
 | 230 | +static __always_inline void arch_atomic_or(int i, atomic_t *v)  | 
|---|
| 226 | 231 |  { | 
|---|
| 227 | 232 |  	asm volatile(LOCK_PREFIX "orl %1,%0" | 
|---|
| 228 | 233 |  			: "+m" (v->counter) | 
|---|
| .. | .. | 
|---|
| 230 | 235 |  			: "memory"); | 
|---|
| 231 | 236 |  } | 
|---|
| 232 | 237 |   | 
|---|
| 233 |  | -static inline int arch_atomic_fetch_or(int i, atomic_t *v)  | 
|---|
 | 238 | +static __always_inline int arch_atomic_fetch_or(int i, atomic_t *v)  | 
|---|
| 234 | 239 |  { | 
|---|
| 235 | 240 |  	int val = arch_atomic_read(v); | 
|---|
| 236 | 241 |   | 
|---|
| .. | .. | 
|---|
| 238 | 243 |   | 
|---|
| 239 | 244 |  	return val; | 
|---|
| 240 | 245 |  } | 
|---|
 | 246 | +#define arch_atomic_fetch_or arch_atomic_fetch_or  | 
|---|
| 241 | 247 |   | 
|---|
| 242 |  | -static inline void arch_atomic_xor(int i, atomic_t *v)  | 
|---|
 | 248 | +static __always_inline void arch_atomic_xor(int i, atomic_t *v)  | 
|---|
| 243 | 249 |  { | 
|---|
| 244 | 250 |  	asm volatile(LOCK_PREFIX "xorl %1,%0" | 
|---|
| 245 | 251 |  			: "+m" (v->counter) | 
|---|
| .. | .. | 
|---|
| 247 | 253 |  			: "memory"); | 
|---|
| 248 | 254 |  } | 
|---|
| 249 | 255 |   | 
|---|
| 250 |  | -static inline int arch_atomic_fetch_xor(int i, atomic_t *v)  | 
|---|
 | 256 | +static __always_inline int arch_atomic_fetch_xor(int i, atomic_t *v)  | 
|---|
| 251 | 257 |  { | 
|---|
| 252 | 258 |  	int val = arch_atomic_read(v); | 
|---|
| 253 | 259 |   | 
|---|
| .. | .. | 
|---|
| 255 | 261 |   | 
|---|
| 256 | 262 |  	return val; | 
|---|
| 257 | 263 |  } | 
|---|
 | 264 | +#define arch_atomic_fetch_xor arch_atomic_fetch_xor  | 
|---|
| 258 | 265 |   | 
|---|
| 259 | 266 |  #ifdef CONFIG_X86_32 | 
|---|
| 260 | 267 |  # include <asm/atomic64_32.h> | 
|---|
| .. | .. | 
|---|
| 262 | 269 |  # include <asm/atomic64_64.h> | 
|---|
| 263 | 270 |  #endif | 
|---|
| 264 | 271 |   | 
|---|
| 265 |  | -#include <asm-generic/atomic-instrumented.h>  | 
|---|
 | 272 | +#define ARCH_ATOMIC  | 
|---|
| 266 | 273 |   | 
|---|
| 267 | 274 |  #endif /* _ASM_X86_ATOMIC_H */ | 
|---|