xa_cmpxchg(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ xa_cmpxchg(9) β€” Kernel API Manual, but make it bestie-core πŸ¦‹

okay so bestie, welcome to the xa_cmpxchg(9) page from the Kernel API Manual ✨ this one is lowkey iconic: it's the conditional-swap girlie for your XArray, and she is very much giving β€œtest it, then maybe replace it” energy πŸ’…


✨ NAME ✨

xa_cmpxchg β€” Conditionally replace an entry in the XArray. periodt πŸ’–


🌸 SYNOPSIS 🌸

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

πŸŽ€ ARGUMENTS πŸŽ€

  • xa β€” XArray. your main-character array, fr fr 🫢
  • index β€” Index into array. the exact spot you're looking at πŸ‘€
  • old β€” Old value to test against. the β€œare you the one?” value πŸ’–
  • entry β€” New value to place in array. the glow-up value ✨
  • gfp β€” Memory allocation flags. the β€œcan I sleep or not?” vibes πŸ¦‹

πŸ’… DESCRIPTION πŸ’…

If the entry at index is the same as old, replace it with entry. If the return value is equal to old, then the exchange was successful. no cap, that's the whole conditional-swap moment πŸ”₯


⭐ CONTEXT ⭐

Any context. Takes and releases the xa_lock. May sleep if the gfp flags permit. so like, she can nap depending on gfp, and that's very valid of her 😭


πŸ”₯ RETURN πŸ”₯

The old value at this index or xa_err if an error happened. check it, bestie β€” it's giving β€œdid my swap actually slay?” πŸ‘‘


πŸ‘‘ SEE ALSO πŸ‘‘

Kernel file ./include/linux/xarray.h β€” yes, that's the source file, iykyk πŸ“

The whole XArray family reunion, in exactly this order: 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_bh(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). obsessed with this lineup, literally a whole squad πŸ§šπŸ’œ


Source/version: ./include/linux Β· date: October 2026 Β· page: xa_cmpxchg(9) β€” byeee bestie, go slay that exchange πŸ’…πŸ«ΆπŸŒΈ

πŸ“¦ where this page comes from