xa_insert_irq(9)
π xa_insert_irq(9) π
okay so bestie, this is a page straight out of the Kernel API Manual (that's the manual name, keep it in your notes π), and it's about a little function called xa_insert_irq that is lowkey the politest way to put something somewhere. no cap.
β¨ NAME β¨
xa_insert_irq β stores this entry in the XArray only if nothing else is already chillin' there. like, it's not gonna shove anybody out of the way. it's giving respectful. π«Ά
πΈ SYNOPSIS πΈ
int xa_insert_irq (struct xarray *xa , unsigned long index , void *entry
, gfp_t gfp );
that's the whole vibe, bestie. one function, four things to hand it. β¨
π ARGUMENTS π
xaβ the XArray itself. the container, the main character, the place where stuff lives. πindexβ the index into the array. like, where in the array. your spot. πentryβ the new entry. the thing you're putting in. the whole point tbh. πgfpβ memory allocation flags. yes, the flags that control how memory gets allocated. they matter, don't skip 'em. π§
π¦ DESCRIPTION π¦
okay this part is important so listen up π₯
if you insert a NULL entry and there's no entry present at that index, it will store a reserved entry β exactly like xa_reserve does. so NULL in does not mean "nothing" in. it's giving β¨reservationβ¨.
but here's the plot twist π β if a reserved entry is already present, the insert will fail, even though loading from that index will return NULL. so yeah, loading gives you NULL, but that does NOT mean the slot is free. it's a trap. iykyk. π
π CONTEXT π
this is process context. it takes and releases the xa_lock while disabling interrupts. it may sleep if the gfp flags permit. so like, know where you're calling it from, bestie. πβ¨
π RETURN π
0β the store succeeded π slay-EBUSYβ another entry was present π the slot was taken-ENOMEMβ memory could not be allocated π not enough room bestie
β SEE ALSO β
Kernel file ./include/linux/xarray.h β and honestly the whole friend group, here's every single one of them:
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_bh(9), xa_cmpxchg_irq(9), xa_insert(9), xa_insert_bh(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 i said β the entire friend group. π«π
and that's the page, bestie!! π this lil gem lives at ./include/linux and it's stamped October 2026 β so like, future vibes but the facts are forever. mwah πβ¨
π¦ 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