raw_atomic6...h_or_release(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… raw_atomic64_fetch_or_release β€” Kernel API Manual ✨

okay bestie, welcome to the Kernel API Manual πŸŽ€ and buckle up, because this one is short, sweet, and honestly kind of iconic. We're doing atomic bitwise OR with release ordering. No cap.


🌸 NAME 🌸

raw_atomic64_fetch_or_release β€” atomic bitwise OR with release ordering πŸ¦‹


🧚 SYNOPSIS 🧚

s64 raw_atomic64_fetch_or_release (s64 i , atomic64_t *v );

πŸ’œ ARGUMENTS πŸ’œ

  • i β€” an s64 value. that's the thing you're OR-ing in, bestie πŸ’«
  • v β€” pointer to atomic64_t. the target. the main character of this operation πŸ‘‘

πŸ”₯ DESCRIPTION πŸ”₯

So the way this works is: it atomically updates v to (v | i), and it does that with release ordering. literally all in one go, no race conditions invited to the party πŸ’…

it's giving "safe and sound" because it's safe to use in noinstr code βœ… β€” but listen, if you're not in noinstr code, the page says to prefer atomic64_fetch_or_release instead. lowkey a note from the kernel: use the vibier wrapper until you actually need the raw one, iykyk πŸ™ˆ


⭐ RETURN ⭐

the original value of v β€” i.e. what it was before you OR'd it, bestie. it gives you the receipts πŸ“Έ


πŸ¦‹ SEE ALSO πŸ¦‹

okay so this is the part where the manpage just dumps the entire friend group on you 😭 β€” no skips, no cuts, every single one is here, and the kernel file you want is ./include/linux/atomic/atomic-arch-fallback.h πŸ“

raw_atomic_read(9), raw_atomic_read_acquire(9), raw_atomic_set(9),
raw_atomic_set_release(9), raw_atomic_add(9), raw_atomic_add_return(9),
raw_atomic_add_return_acquire(9), raw_atomic_add_return_release(9),
raw_atomic_add_return_relaxed(9), raw_atomic_fetch_add(9),
raw_atomic_fetch_add_acquire(9), raw_atomic_fetch_add_release(9),
raw_atomic_fetch_add_relaxed(9), raw_atomic_sub(9),
raw_atomic_sub_return(9), raw_atomic_sub_return_acquire(9),
raw_atomic_sub_return_release(9), raw_atomic_sub_return_relaxed(9),
raw_atomic_fetch_sub(9), raw_atomic_fetch_sub_acquire(9),
raw_atomic_fetch_sub_release(9), raw_atomic_fetch_sub_relaxed(9),
raw_atomic_inc(9), raw_atomic_inc_return(9),
raw_atomic_inc_return_acquire(9), raw_atomic_inc_return_release(9),
raw_atomic_inc_return_relaxed(9), raw_atomic_fetch_inc(9),
raw_atomic_fetch_inc_acquire(9), raw_atomic_fetch_inc_release(9),
raw_atomic_fetch_inc_relaxed(9), raw_atomic_dec(9),
raw_atomic_dec_return(9), raw_atomic_dec_return_acquire(9),
raw_atomic_dec_return_release(9), raw_atomic_dec_return_relaxed(9),
raw_atomic_fetch_dec(9), raw_atomic_fetch_dec_acquire(9),
raw_atomic_fetch_dec_release(9), raw_atomic_fetch_dec_relaxed(9),
raw_atomic_and(9), raw_atomic_fetch_and(9),
raw_atomic_fetch_and_acquire(9), raw_atomic_fetch_and_release(9),
raw_atomic_fetch_and_relaxed(9), raw_atomic_andnot(9),
raw_atomic_fetch_andnot(9), raw_atomic_fetch_andnot_acquire(9),
raw_atomic_fetch_andnot_release(9), raw_atomic_fetch_andnot_relaxed(9),
raw_atomic_or(9), raw_atomic_fetch_or(9),
raw_atomic_fetch_or_acquire(9), raw_atomic_fetch_or_release(9),
raw_atomic_fetch_or_relaxed(9), raw_atomic_xor(9),
raw_atomic_fetch_xor(9), raw_atomic_fetch_xor_acquire(9),
raw_atomic_fetch_xor_release(9), raw_atomic_fetch_xor_relaxed(9),
raw_atomic_xchg(9), raw_atomic_xchg_acquire(9),
raw_atomic_xchg_release(9), raw_atomic_xchg_relaxed(9),
raw_atomic_cmpxchg(9), raw_atomic_cmpxchg_acquire(9),
raw_atomic_cmpxchg_release(9), raw_atomic_cmpxchg_relaxed(9),
raw_atomic_try_cmpxchg(9), raw_atomic_try_cmpxchg_acquire(9),
raw_atomic_try_cmpxchg_release(9), raw_atomic_try_cmpxchg_relaxed(9),
raw_atomic_sub_and_test(9), raw_atomic_dec_and_test(9),
raw_atomic_inc_and_test(9), raw_atomic_add_negative(9),
raw_atomic_add_negative_acquire(9), raw_atomic_add_negative_release(9),
raw_atomic_add_negative_relaxed(9), raw_atomic_fetch_add_unless(9),
raw_atomic_add_unless(9), raw_atomic_inc_not_zero(9),
raw_atomic_inc_unless_negative(9), raw_atomic_dec_unless_positive(9),
raw_atomic_dec_if_positive(9), raw_atomic64_read(9),
raw_atomic64_read_acquire(9), raw_atomic64_set(9),
raw_atomic64_set_release(9), raw_atomic64_add(9),
raw_atomic64_add_return(9), raw_atomic64_add_return_acquire(9),
raw_atomic64_add_return_release(9), raw_atomic64_add_return_relaxed(9),
raw_atomic64_fetch_add(9), raw_atomic64_fetch_add_acquire(9),
raw_atomic64_fetch_add_release(9), raw_atomic64_fetch_add_relaxed(9),
raw_atomic64_sub(9), raw_atomic64_sub_return(9),
raw_atomic64_sub_return_acquire(9), raw_atomic64_sub_return_release(9),
raw_atomic64_sub_return_relaxed(9), raw_atomic64_fetch_sub(9),
raw_atomic64_fetch_sub_acquire(9), raw_atomic64_fetch_sub_release(9),
raw_atomic64_fetch_sub_relaxed(9), raw_atomic64_inc(9),
raw_atomic64_inc_return(9), raw_atomic64_inc_return_acquire(9),
raw_atomic64_inc_return_release(9), raw_atomic64_inc_return_relaxed(9),
raw_atomic64_fetch_inc(9), raw_atomic64_fetch_inc_acquire(9),
raw_atomic64_fetch_inc_release(9), raw_atomic64_fetch_inc_relaxed(9),
raw_atomic64_dec(9), raw_atomic64_dec_return(9),
raw_atomic64_dec_return_acquire(9), raw_atomic64_dec_return_release(9),
raw_atomic64_dec_return_relaxed(9), raw_atomic64_fetch_dec(9),
raw_atomic64_fetch_dec_acquire(9), raw_atomic64_fetch_dec_release(9),
raw_atomic64_fetch_dec_relaxed(9), raw_atomic64_and(9),
raw_atomic64_fetch_and(9), raw_atomic64_fetch_and_acquire(9),
raw_atomic64_fetch_and_release(9), raw_atomic64_fetch_and_relaxed(9),
raw_atomic64_andnot(9), raw_atomic64_fetch_andnot(9),
raw_atomic64_fetch_andnot_acquire(9),
raw_atomic64_fetch_andnot_release(9),
raw_atomic64_fetch_andnot_relaxed(9), raw_atomic64_or(9),
raw_atomic64_fetch_or(9), raw_atomic64_fetch_or_acquire(9),
raw_atomic64_fetch_or_relaxed(9), raw_atomic64_xor(9),
raw_atomic64_fetch_xor(9), raw_atomic64_fetch_xor_acquire(9),
raw_atomic64_fetch_xor_release(9), raw_atomic64_fetch_xor_relaxed(9),
raw_atomic64_xchg(9), raw_atomic64_xchg_acquire(9),
raw_atomic64_xchg_release(9), raw_atomic64_xchg_relaxed(9),
raw_atomic64_cmpxchg(9), raw_atomic64_cmpxchg_acquire(9),
raw_atomic64_cmpxchg_release(9), raw_atomic64_cmpxchg_relaxed(9),
raw_atomic64_try_cmpxchg(9), raw_atomic64_try_cmpxchg_acquire(9),
raw_atomic64_try_cmpxchg_release(9),
raw_atomic64_try_cmpxchg_relaxed(9), raw_atomic64_sub_and_test(9),
raw_atomic64_dec_and_test(9), raw_atomic64_inc_and_test(9),
raw_atomic64_add_negative(9), raw_atomic64_add_negative_acquire(9),
raw_atomic64_add_negative_release(9),
raw_atomic64_add_negative_relaxed(9), raw_atomic64_fetch_add_unless(9),
raw_atomic64_add_unless(9), raw_atomic64_inc_not_zero(9),
raw_atomic64_inc_unless_negative(9),
raw_atomic64_dec_unless_positive(9), raw_atomic64_dec_if_positive(9)

like, the whole extended family showed up πŸ˜­πŸ’€ but honestly? respect. they ate. periodt. πŸ‘‘


πŸ’– ngl bestie, this is the raw one β€” if you can use the non-raw atomic64_fetch_or_release, the doc straight up tells you to. noinstr is the whole reason this exists. don't make it weird πŸ™ˆ

and that's the page!! source: ./include/linux/atomic πŸŽ€ dated October 2026 🌈 mwah, love u, go write some correct atomics πŸ’œβœ¨πŸ«Ά

πŸ“¦ where this page comes from