xa_for_each_start(9)
π NAME π
xa_for_each_start(9) β the Kernel API Manual bestie for iterating over a portion of an XArray. The official vibe: Iterate over a portion of an XArray. periodt. π¦
β¨ SYNOPSIS β¨
xa_for_each_start (xa , index , entry , start );
π ARGUMENTS π
xaβ XArray. That's the container, bestie. πindexβ Index of entry. iykyk.entryβ Entry retrieved from array.startβ First index to retrieve from array.
πΈ DESCRIPTION πΈ
Okay so during the iteration, entry will have the value of the entry stored in xa at index. You may modify index during the iteration if you want to skip or reprocess indices β no cap, that's allowed. It is safe to modify the array during the iteration. At the end of the iteration, entry will be set to NULL and index will have a value less than or equal to max.
Real talk: xa_for_each_start is O(n.log(n)) while xas_for_each is O(n). You have to handle your own locking with xas_for_each, and if you have to unlock after each iteration, it will also end up being O(n.log(n)). xa_for_each_start will spin if it hits a retry entry; if you intend to see retry entries, you should use the xas_for_each iterator instead. The xas_for_each iterator will expand into more inline code than xa_for_each_start.
π¨ heads up, bestie: the spin-on-retry-entry thing is real, and if you need retry entries in your life you want xas_for_each, not this one. π
π CONTEXT π
Any context. Takes and releases the RCU lock. Literally any context, bestie β it grabs and releases the RCU lock for you. π
π SEE ALSO π
Kernel file ./include/linux/xarray.h, plus the whole SEE ALSO squad: 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(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_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) π«Ά
signed, sealed, and delivered with π from ./include/linux, October 2026 β xa_for_each_start(9) β¨
π¦ 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