xa_insert_irq(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… 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