xa_cmpxchg(9)
π¦ 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
- 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