xa_for_each_marked(9)
π
xa_for_each_marked β Kernel API Manual, bestie edition β¨
okay so picture this: you're deep in the kernel, you've got an XArray, and some of the entries in it are tagged β marked, if you will β and you only want the marked ones. That's the whole gig. Welcome to xa_for_each_marked(9), brought to you by the Kernel API Manual. Let's get into it π
β¨ NAME β¨
xa_for_each_marked β the iterator that goes through all the marked entries in an XArray. Only the marked ones. It's giving selective, and honestly? Obsessed. π
πΈ SYNOPSIS πΈ
xa_for_each_marked (xa , index , entry , filter );
yes, that's the whole signature, no cap. Put it in your code and let it cook π
π¦ ARGUMENTS π¦
xaβ the XArray itself. The main character. The whole vibe lives here.indexβ the index of the entry. It's your cursor, it's your GPS, it's the little dot on the map πΊοΈentryβ the entry you got back from the array. This is the thing you actually wanted, the payoff, the slay πfilterβ the selection criterion. The bouncer at the door. If an entry doesn't matchfilter, it does not get in. Periodt. π«
π DESCRIPTION π
So here's what's happening while you iterate: entry will have the value of the entry stored in xa at index. Simple, clean, iconic.
The iteration skips every entry in the array that doesn't match filter. Not interested, moving on, next π
You may modify index during the iteration if you want to skip indices or reprocess indices β yes bestie, you have permission, it's literally fine. And it's safe to modify the array during the iteration too. Go off, be free, live your truth π
At the end of the iteration, entry will be set to NULL, and index will have a value less than or equal to max. That's just how it wraps up. Clean exit, no loose ends π«Ά
Now, the performance tea β β and this part matters, ngl:
xa_for_each_markedis O(n.log(n)), whilexas_for_each_markedis 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_markedwill spin if it hits a retry entry. π Like, it's just gonna sit there spinning. If you intend to see retry entries, you should use thexas_for_each_markediterator instead.- Heads up though: the
xas_for_each_markediterator will expand into more inline code thanxa_for_each_marked. Trade-offs, babe. Everything's a trade-off. π
β οΈ fr fr read that spin warning again. If retry entries are in your future,xa_for_each_markedis not the one. Usexas_for_each_marked.
π CONTEXT π
Any context. Literally any. It takes and releases the RCU lock on its own. Low maintenance, high value, we love to see it π§
β 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_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)
and that's the page!! π huge thanks to the fine folks over at ./include/linux β this one dropped October 2026, so mark your calendars bestie ποΈβ¨ go iterate over something marked, you've got this, 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