xa_cmpxchg_bh(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… xa_cmpxchg_bh(9) β€” like, the Kernel API Manual bestie ✨

okay so welcome to the xa_cmpxchg_bh(9) page, my love β€” it's a kernel API manual entry and it's honestly serving very "small function, big responsibilities" energy πŸŽ€


✨ NAME ✨

xa_cmpxchg_bh β€” conditionally replace an entry in the XArray πŸ¦‹


🌸 SYNOPSIS 🌸

void * xa_cmpxchg_bh (struct xarray *xa , unsigned long index , void
*old , void *entry , gfp_t gfp );

πŸŽ€ ARGUMENTS πŸŽ€

  • xa β€” the XArray itself. the whole vibe container πŸ’–
  • index β€” index into array. yes bestie, a specific spot πŸ”₯
  • old β€” old value to test against. the "are you who i think you are" check πŸ‘€
  • entry β€” new value to place in array. the glow-up going in ✨
  • gfp β€” memory allocation flags. the rules of the road for grabbing memory 🌈

πŸ’œ DESCRIPTION πŸ’œ

so this function is literally like calling xa_cmpxchg, except β€” and this is the whole personality β€” it disables softirqs while holding the array lock πŸ’… periodt.

that's it. that's the flex. softirqs: off. array lock: held. iconic behaviour honestly πŸ‘‘


🧚 CONTEXT 🧚

Any context. takes and releases the xa_lock while disabling softirqs. may sleep if the gfp flags permit 😴🌸

ngl bestie, "any context" sounds chill but read it properly β€” the sleeping part is conditional on your gfp flags, so don't just assume 😭

⭐ RETURN ⭐

the old value at this index, or xa_err if an error happened 🫢


πŸ¦‹ SEE ALSO πŸ¦‹

kernel file ./include/linux/xarray.h and like… the entire extended xarray cinematic universe, no cap:

xa_mk_value(9), xa_to_value(9), xa_is_value(9), xa_tag_pointer(9), xa_untag_pointer(9), xa_pointer_tag(9), xa_is_zero(9), xa_is_err(9), xa_err(9), struct xa_limit(9), struct xarray(9), DEFINE_XARRAY_FLAGS(9), DEFINE_XARRAY(9), DEFINE_XARRAY_ALLOC(9), DEFINE_XARRAY_ALLOC1(9), xa_init_flags(9), xa_init(9), xa_empty(9), xa_marked(9), xa_for_each_range(9), xa_for_each_start(9), xa_for_each(9), xa_for_each_marked(9), xa_store_bh(9), xa_store_irq(9), xa_erase_bh(9), xa_erase_irq(9), xa_cmpxchg(9), xa_cmpxchg_irq(9), xa_insert(9), xa_insert_bh(9), xa_insert_irq(9), xa_alloc(9), xa_alloc_bh(9), xa_alloc_irq(9), xa_alloc_cyclic(9), xa_alloc_cyclic_bh(9), xa_alloc_cyclic_irq(9), xa_reserve(9), xa_reserve_bh(9), xa_reserve_irq(9), xa_release(9), xa_is_sibling(9), xa_is_retry(9), xa_is_advanced(9), xa_update_node_t(9), XA_STATE(9), XA_STATE_ORDER(9), xas_error(9), xas_set_err(9), xas_invalid(9), xas_valid(9), xas_is_node(9), xas_reset(9), xas_retry(9), xas_reload(9), xas_set(9), xas_advance(9), xas_set_order(9), xas_set_update(9), xas_next_entry(9), xas_next_marked(9), xas_for_each(9), xas_for_each_marked(9), xas_for_each_conflict(9), xas_prev(9), xas_next(9)

like, go read all of them. i'll wait. πŸ’€


and that's the page bestie!! πŸ“ this one came to you from ./include/linux, dated October 2026 β€” mwah, slay, bye πŸ‘‘πŸ’–

πŸ“¦ where this page comes from