atomic_sub_return
#define atomic_sub(i, v) atomic_sub_return((i), (v))
#define atomic_sub_and_test(i, v) (atomic_sub_return((i), (v)) == 0)
#define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0)
#define atomic_dec_return(v) atomic_sub_return(1, (v))