1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
static inline void atomic_inc(atomic_t *v) { atomic_add_return(1, v); }
#define atomic_inc_return(v) atomic_add_return(1, (v))
#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
static inline void atomic_dec(atomic_t *v) { atomic_sub_return(1, v); }
#define atomic_dec_return(v) atomic_sub_return(1, (v))
#define atomic_dec_and_test(v) (atomic_dec_return(v) == 0)
static inline void atomic_add(int i, atomic_t *v) { atomic_add_return(i, v); }
static inline void atomic_sub(int i, atomic_t *v) { atomic_sub_return(i, v); }
#define atomic_sub_and_test(i, v) (atomic_sub_return((i), (v)) == 0)
static inline int atomic_add_negative(int i, atomic_t *v) { return atomic_add_return(i, v) < 0; }
#define atomic_read(v) READ_ONCE((v)->counter)
#define atomic_set(v, i) WRITE_ONCE(((v)->counter), (i))
|