xa_alloc_irq(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ xa_alloc_irq ✨

okay bestie, so this is xa_alloc_irq from the kernel API manual (section 9, the kernel-internals girlies πŸ’…) β€” and she's literally the "find somewhere to put this" function for your XArray. no cap.


πŸ’– NAME πŸ’–

xa_alloc_irq β€” find somewhere to store this entry in the XArray. yes that's it, that's the whole job πŸŽ€


🌸 SYNOPSIS 🌸

int xa_alloc_irq (struct xarray *xa , u32 *id , void *entry , struct
      xa_limit limit , gfp_t gfp );

πŸ¦‹ ARGUMENTS πŸ¦‹

  • xa β€” the XArray. your girl. the whole point 🫢
  • id β€” pointer to ID.
  • entry β€” the new entry you're shoving in there.
  • limit β€” range of ID to allocate. this is your vibe check on where it's allowed to land.
  • gfp β€” memory allocation flags.

πŸ‘‘ DESCRIPTION πŸ‘‘

So here's the tea β˜•: xa_alloc_irq goes looking for an empty entry in xa somewhere between limit.min and limit.max, stores the index it found into the id pointer, and then stores your entry at that index. the ordering is the moment β€” a concurrent lookup will not see an uninitialised id. iconic behaviour, honestly. ✨

🌈 Important bestie info: this must only be operated on an xarray initialized with flag XA_FLAGS_ALLOC set in xa_init_flags. don't skip that step, i'm begging you 😭

πŸ’… CONTEXT πŸ’…

Process context. it takes and releases the xa_lock while disabling interrupts. may sleep if the gfp flags permit β€” so like, read the room before you call it from somewhere unhinged πŸ’€


⭐ RETURN ⭐

  • 0 on success πŸŽ‰
  • -ENOMEM if memory could not be allocated 😭
  • -EBUSY if there are no free entries in limit πŸ™ˆ

🧚 SEE ALSO 🧚

kernel file ./include/linux/xarray.h, plus the whole friend group:

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_insert_irq(9), xa_alloc(9), xa_alloc_bh(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)


okay that's the whole page, go touch some XArray entries πŸ¦‹πŸ’œ

πŸŽ€ signed, sealed, delivered: ./include/linux, October 2026 β€” from your fave kernel manual, xa_alloc_irq(9). periodt. πŸ’…βœ¨
πŸ“¦ where this page comes from