xa_alloc_cyclic_bh(9)
β¨ xa_alloc_cyclic_bh(9) β the Kernel API Manual glow-up β¨
okay so bestie, buckle up, because this one is a whole mood. this is a page from the Kernel API Manual about xa_alloc_cyclic_bh, and the way that it literally just finds somewhere to store this entry in the XArrayβ¦ iconic behaviour honestly. π¦
πΈ NAME πΈ
xa_alloc_cyclic_bh β Find somewhere to store this entry in the XArray.
no fr, that's the entire job. it's giving "personal assistant for your XArray" energy. π
π SYNOPSIS π
int xa_alloc_cyclic_bh (struct xarray *xa , u32 *id , void *entry ,
struct xa_limit limit , u32 *next , gfp_t gfp );
look at her. six arguments. main character energy fr fr. π
π«Ά ARGUMENTS π«Ά
xaβ the XArray. that's the whole vibe container, the xarray in question. πidβ Pointer to ID. yeah, a pointer, capital letters, we're doing this.entryβ New entry. the thing you're shoving in there.limitβ Range of allocated ID. this is your "please stay between these numbers" situation.nextβ Pointer to next ID to allocate. this is where the cyclic-ness kicks in.gfpβ Memory allocation flags. lowkey the most "adult" argument here.
π DESCRIPTION π
okay so here's the tea β β this function finds an empty entry in xa between limit.min and limit.max, stores the index into the id pointer, then stores the entry at that index. π―
A concurrent lookup will not see an uninitialised id. we love a safe handoff, no cap. π«Ά
The search for an empty entry will start at next and will wrap around if necessary. it's giving "loop back to the start like nothing happened" energy. π
β οΈ big one, bestie: this must only be operated on an xarray initialized with flagXA_FLAGS_ALLOCset inxa_init_flags. do not come in here with some other xarray and expect slay behaviour. that's a vibe violation. π
Note that callers interested in whether wrapping has occurred should use __xa_alloc_cyclic instead. iykyk β different function, different little treat. π
π§ CONTEXT π§
Any context. literally any of them, she's flexible. π
Takes and releases the xa_lock while disabling softirqs. and yes she may sleep if the gfp flags permit β she's allowed to nap, we respect the nap. π΄β¨
π₯ RETURN π₯
0β if the allocation succeeded. slay! π-ENOMEMβ if memory could not be allocated. the classic "no memory for u" moment. π-EBUSYβ if there are no free entries inlimit. the range said "full", the range meant it. π
π SEE ALSO π
Kernel file ./include/linux/xarray.h
and now, the friend group. every single one of them, in order, no skipping β this is the whole group chat: π«Ά
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_irq(9), xa_alloc_cyclic(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 whole group chat. ππ
and that's the page, bestie! π this cutie lives in ./include/linux and the manual's dated October 2026 β so yeah, she's from the future, and she ate. periodt. π
β¨π₯
π¦ 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