atomic_dec_if_positive(9)
π atomic_dec_if_positive β the kernel API manual, but make it cute β¨
okay so this is the page for atomic_dec_if_positive(9) and honestly? she's an icon. she decrements only if the vibe is positive, and she does it atomically with full ordering. no cap. let's get into it π«Ά
πΈ NAME πΈ
atomic_dec_if_positive β atomic decrement if positive, with full ordering π
β¨ SYNOPSIS β¨
int atomic_dec_if_positive (atomic_t *v );
that's it. that's the whole signature. short king π
π ARGUMENTS π
vβ pointer toatomic_t. yes bestie, a pointer, we're doing pointer things π¦
π DESCRIPTION π
okay so here's the tea β β if (v > 0), this function atomically updates v to (v - 1) with full ordering. literally does the whole read-check-write thing without anyone else sneaking in between. slay.
otherwise β like if v isn't positive β v is not modified, and relaxed ordering is provided. so nothing happens to your number, and the fences loosen up. she stays chill π
β οΈ real talk though: this is unsafe to use innoinstrcode. useraw_atomic_dec_if_positivethere instead. like, do not come for her innoinstrcontext, she will not survive it π
β RETURN β
the old value of (v - 1) β regardless of whether v was updated. so you get an answer either way, which is giving reliable bestie energy π
π SEE ALSO π
so many siblings, it's giving huge family reunion π β they all live in the kernel file ./include/linux/atomic/atomic-instrumented.h:
atomic_read(9), atomic_read_acquire(9), atomic_set(9), atomic_set_release(9), atomic_add(9), atomic_add_return(9), atomic_add_return_acquire(9), atomic_add_return_release(9), atomic_add_return_relaxed(9), atomic_fetch_add(9), atomic_fetch_add_acquire(9), atomic_fetch_add_release(9), atomic_fetch_add_relaxed(9), atomic_sub(9), atomic_sub_return(9), atomic_sub_return_acquire(9), atomic_sub_return_release(9), atomic_sub_return_relaxed(9), atomic_fetch_sub(9), atomic_fetch_sub_acquire(9), atomic_fetch_sub_release(9), atomic_fetch_sub_relaxed(9), atomic_inc(9), atomic_inc_return(9), atomic_inc_return_acquire(9), atomic_inc_return_release(9), atomic_inc_return_relaxed(9), atomic_fetch_inc(9), atomic_fetch_inc_acquire(9), atomic_fetch_inc_release(9), atomic_fetch_inc_relaxed(9), atomic_dec(9), atomic_dec_return(9), atomic_dec_return_acquire(9), atomic_dec_return_release(9), atomic_dec_return_relaxed(9), atomic_fetch_dec(9), atomic_fetch_dec_acquire(9), atomic_fetch_dec_release(9), atomic_fetch_dec_relaxed(9), atomic_and(9), atomic_fetch_and(9), atomic_fetch_and_acquire(9), atomic_fetch_and_release(9), atomic_fetch_and_relaxed(9), atomic_andnot(9), atomic_fetch_andnot(9), atomic_fetch_andnot_acquire(9), atomic_fetch_andnot_release(9), atomic_fetch_andnot_relaxed(9), atomic_or(9), atomic_fetch_or(9), atomic_fetch_or_acquire(9), atomic_fetch_or_release(9), atomic_fetch_or_relaxed(9), atomic_xor(9), atomic_fetch_xor(9), atomic_fetch_xor_acquire(9), atomic_fetch_xor_release(9), atomic_fetch_xor_relaxed(9), atomic_xchg(9), atomic_xchg_acquire(9), atomic_xchg_release(9), atomic_xchg_relaxed(9), atomic_cmpxchg(9), atomic_cmpxchg_acquire(9), atomic_cmpxchg_release(9), atomic_cmpxchg_relaxed(9), atomic_try_cmpxchg(9), atomic_try_cmpxchg_acquire(9), atomic_try_cmpxchg_release(9), atomic_try_cmpxchg_relaxed(9), atomic_sub_and_test(9), atomic_dec_and_test(9), atomic_inc_and_test(9), atomic_add_negative(9), atomic_add_negative_acquire(9), atomic_add_negative_release(9), atomic_add_negative_relaxed(9), atomic_fetch_add_unless(9), atomic_add_unless(9), atomic_inc_not_zero(9), atomic_inc_unless_negative(9), atomic_dec_unless_positive(9)
and the 64-bit girlies π§ β atomic64_read(9), atomic64_read_acquire(9), atomic64_set(9), atomic64_set_release(9), atomic64_add(9), atomic64_add_return(9), atomic64_add_return_acquire(9), atomic64_add_return_release(9), atomic64_add_return_relaxed(9), atomic64_fetch_add(9), atomic64_fetch_add_acquire(9), atomic64_fetch_add_release(9), atomic64_fetch_add_relaxed(9), atomic64_sub(9), atomic64_sub_return(9), atomic64_sub_return_acquire(9), atomic64_sub_return_release(9), atomic64_sub_return_relaxed(9), atomic64_fetch_sub(9), atomic64_fetch_sub_acquire(9), atomic64_fetch_sub_release(9), atomic64_fetch_sub_relaxed(9), atomic64_inc(9), atomic64_inc_return(9), atomic64_inc_return_acquire(9), atomic64_inc_return_release(9), atomic64_inc_return_relaxed(9), atomic64_fetch_inc(9), atomic64_fetch_inc_acquire(9), atomic64_fetch_inc_release(9), atomic64_fetch_inc_relaxed(9), atomic64_dec(9), atomic64_dec_return(9), atomic64_dec_return_acquire(9), atomic64_dec_return_release(9), atomic64_dec_return_relaxed(9), atomic64_fetch_dec(9), atomic64_fetch_dec_acquire(9), atomic64_fetch_dec_release(9), atomic64_fetch_dec_relaxed(9), atomic64_and(9), atomic64_fetch_and(9), atomic64_fetch_and_acquire(9), atomic64_fetch_and_release(9), atomic64_fetch_and_relaxed(9), atomic64_andnot(9), atomic64_fetch_andnot(9), atomic64_fetch_andnot_acquire(9), atomic64_fetch_andnot_release(9), atomic64_fetch_andnot_relaxed(9), atomic64_or(9), atomic64_fetch_or(9), atomic64_fetch_or_acquire(9), atomic64_fetch_or_release(9), atomic64_fetch_or_relaxed(9), atomic64_xor(9), atomic64_fetch_xor(9), atomic64_fetch_xor_acquire(9), atomic64_fetch_xor_release(9), atomic64_fetch_xor_relaxed(9), atomic64_xchg(9), atomic64_xchg_acquire(9), atomic64_xchg_release(9), atomic64_xchg_relaxed(9), atomic64_cmpxchg(9), atomic64_cmpxchg_acquire(9), atomic64_cmpxchg_release(9), atomic64_cmpxchg_relaxed(9), atomic64_try_cmpxchg(9), atomic64_try_cmpxchg_acquire(9), atomic64_try_cmpxchg_release(9), atomic64_try_cmpxchg_relaxed(9), atomic64_sub_and_test(9), atomic64_dec_and_test(9), atomic64_inc_and_test(9), atomic64_add_negative(9), atomic64_add_negative_acquire(9), atomic64_add_negative_release(9), atomic64_add_negative_relaxed(9), atomic64_fetch_add_unless(9), atomic64_add_unless(9), atomic64_inc_not_zero(9), atomic64_inc_unless_negative(9), atomic64_dec_unless_positive(9), atomic64_dec_if_positive(9)
and the long-distance cousins π¦ β atomic_long_read(9), atomic_long_read_acquire(9), atomic_long_set(9), atomic_long_set_release(9), atomic_long_add(9), atomic_long_add_return(9), atomic_long_add_return_acquire(9), atomic_long_add_return_release(9), atomic_long_add_return_relaxed(9), atomic_long_fetch_add(9), atomic_long_fetch_add_acquire(9), atomic_long_fetch_add_release(9), atomic_long_fetch_add_relaxed(9), atomic_long_sub(9), atomic_long_sub_return(9), atomic_long_sub_return_acquire(9), atomic_long_sub_return_release(9), atomic_long_sub_return_relaxed(9), atomic_long_fetch_sub(9), atomic_long_fetch_sub_acquire(9), atomic_long_fetch_sub_release(9), atomic_long_fetch_sub_relaxed(9), atomic_long_inc(9), atomic_long_inc_return(9), atomic_long_inc_return_acquire(9), atomic_long_inc_return_release(9), atomic_long_inc_return_relaxed(9), atomic_long_fetch_inc(9), atomic_long_fetch_inc_acquire(9), atomic_long_fetch_inc_release(9), atomic_long_fetch_inc_relaxed(9), atomic_long_dec(9), atomic_long_dec_return(9), atomic_long_dec_return_acquire(9), atomic_long_dec_return_release(9), atomic_long_dec_return_relaxed(9), atomic_long_fetch_dec(9), atomic_long_fetch_dec_acquire(9), atomic_long_fetch_dec_release(9), atomic_long_fetch_dec_relaxed(9), atomic_long_and(9), atomic_long_fetch_and(9), atomic_long_fetch_and_acquire(9), atomic_long_fetch_and_release(9), atomic_long_fetch_and_relaxed(9), atomic_long_andnot(9), atomic_long_fetch_andnot(9), atomic_long_fetch_andnot_acquire(9), atomic_long_fetch_andnot_release(9), atomic_long_fetch_andnot_relaxed(9), atomic_long_or(9), atomic_long_fetch_or(9), atomic_long_fetch_or_acquire(9), atomic_long_fetch_or_release(9), atomic_long_fetch_or_relaxed(9), atomic_long_xor(9), atomic_long_fetch_xor(9), atomic_long_fetch_xor_acquire(9), atomic_long_fetch_xor_release(9), atomic_long_fetch_xor_relaxed(9), atomic_long_xchg(9), atomic_long_xchg_acquire(9), atomic_long_xchg_release(9), atomic_long_xchg_relaxed(9), atomic_long_cmpxchg(9), atomic_long_cmpxchg_acquire(9), atomic_long_cmpxchg_release(9), atomic_long_cmpxchg_relaxed(9), atomic_long_try_cmpxchg(9), atomic_long_try_cmpxchg_acquire(9), atomic_long_try_cmpxchg_release(9), atomic_long_try_cmpxchg_relaxed(9), atomic_long_sub_and_test(9), atomic_long_dec_and_test(9), atomic_long_inc_and_test(9), atomic_long_add_negative(9), atomic_long_add_negative_acquire(9), atomic_long_add_negative_release(9), atomic_long_add_negative_relaxed(9), atomic_long_fetch_add_unless(9), atomic_long_add_unless(9), atomic_long_inc_not_zero(9), atomic_long_inc_unless_negative(9), atomic_long_dec_unless_positive(9), atomic_long_dec_if_positive(9)
and that's the page!! π tysm for reading, mwah π
this whole thing ships from the kernel source file ./include/linux/atomic, dated October 2026 β so like, mark your calendar bestie, and go atomically decrement something responsibly πΈπ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms