xref: /linux-6.15/lib/xarray.c (revision 1988b318)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * XArray implementation
4  * Copyright (c) 2017-2018 Microsoft Corporation
5  * Copyright (c) 2018-2020 Oracle
6  * Author: Matthew Wilcox <[email protected]>
7  */
8 
9 #include <linux/bitmap.h>
10 #include <linux/export.h>
11 #include <linux/list.h>
12 #include <linux/slab.h>
13 #include <linux/xarray.h>
14 
15 #include "radix-tree.h"
16 
17 /*
18  * Coding conventions in this file:
19  *
20  * @xa is used to refer to the entire xarray.
21  * @xas is the 'xarray operation state'.  It may be either a pointer to
22  * an xa_state, or an xa_state stored on the stack.  This is an unfortunate
23  * ambiguity.
24  * @index is the index of the entry being operated on
25  * @mark is an xa_mark_t; a small number indicating one of the mark bits.
26  * @node refers to an xa_node; usually the primary one being operated on by
27  * this function.
28  * @offset is the index into the slots array inside an xa_node.
29  * @parent refers to the @xa_node closer to the head than @node.
30  * @entry refers to something stored in a slot in the xarray
31  */
32 
33 static inline unsigned int xa_lock_type(const struct xarray *xa)
34 {
35 	return (__force unsigned int)xa->xa_flags & 3;
36 }
37 
38 static inline void xas_lock_type(struct xa_state *xas, unsigned int lock_type)
39 {
40 	if (lock_type == XA_LOCK_IRQ)
41 		xas_lock_irq(xas);
42 	else if (lock_type == XA_LOCK_BH)
43 		xas_lock_bh(xas);
44 	else
45 		xas_lock(xas);
46 }
47 
48 static inline void xas_unlock_type(struct xa_state *xas, unsigned int lock_type)
49 {
50 	if (lock_type == XA_LOCK_IRQ)
51 		xas_unlock_irq(xas);
52 	else if (lock_type == XA_LOCK_BH)
53 		xas_unlock_bh(xas);
54 	else
55 		xas_unlock(xas);
56 }
57 
58 static inline bool xa_track_free(const struct xarray *xa)
59 {
60 	return xa->xa_flags & XA_FLAGS_TRACK_FREE;
61 }
62 
63 static inline bool xa_zero_busy(const struct xarray *xa)
64 {
65 	return xa->xa_flags & XA_FLAGS_ZERO_BUSY;
66 }
67 
68 static inline void xa_mark_set(struct xarray *xa, xa_mark_t mark)
69 {
70 	if (!(xa->xa_flags & XA_FLAGS_MARK(mark)))
71 		xa->xa_flags |= XA_FLAGS_MARK(mark);
72 }
73 
74 static inline void xa_mark_clear(struct xarray *xa, xa_mark_t mark)
75 {
76 	if (xa->xa_flags & XA_FLAGS_MARK(mark))
77 		xa->xa_flags &= ~(XA_FLAGS_MARK(mark));
78 }
79 
80 static inline unsigned long *node_marks(struct xa_node *node, xa_mark_t mark)
81 {
82 	return node->marks[(__force unsigned)mark];
83 }
84 
85 static inline bool node_get_mark(struct xa_node *node,
86 		unsigned int offset, xa_mark_t mark)
87 {
88 	return test_bit(offset, node_marks(node, mark));
89 }
90 
91 /* returns true if the bit was set */
92 static inline bool node_set_mark(struct xa_node *node, unsigned int offset,
93 				xa_mark_t mark)
94 {
95 	return __test_and_set_bit(offset, node_marks(node, mark));
96 }
97 
98 /* returns true if the bit was set */
99 static inline bool node_clear_mark(struct xa_node *node, unsigned int offset,
100 				xa_mark_t mark)
101 {
102 	return __test_and_clear_bit(offset, node_marks(node, mark));
103 }
104 
105 static inline bool node_any_mark(struct xa_node *node, xa_mark_t mark)
106 {
107 	return !bitmap_empty(node_marks(node, mark), XA_CHUNK_SIZE);
108 }
109 
110 static inline void node_mark_all(struct xa_node *node, xa_mark_t mark)
111 {
112 	bitmap_fill(node_marks(node, mark), XA_CHUNK_SIZE);
113 }
114 
115 #define mark_inc(mark) do { \
116 	mark = (__force xa_mark_t)((__force unsigned)(mark) + 1); \
117 } while (0)
118 
119 /*
120  * xas_squash_marks() - Merge all marks to the first entry
121  * @xas: Array operation state.
122  *
123  * Set a mark on the first entry if any entry has it set.  Clear marks on
124  * all sibling entries.
125  */
126 static void xas_squash_marks(const struct xa_state *xas)
127 {
128 	unsigned int mark = 0;
129 	unsigned int limit = xas->xa_offset + xas->xa_sibs + 1;
130 
131 	do {
132 		unsigned long *marks = xas->xa_node->marks[mark];
133 		if (find_next_bit(marks, limit, xas->xa_offset + 1) == limit)
134 			continue;
135 		__set_bit(xas->xa_offset, marks);
136 		bitmap_clear(marks, xas->xa_offset + 1, xas->xa_sibs);
137 	} while (mark++ != (__force unsigned)XA_MARK_MAX);
138 }
139 
140 /* extracts the offset within this node from the index */
141 static unsigned int get_offset(unsigned long index, struct xa_node *node)
142 {
143 	return (index >> node->shift) & XA_CHUNK_MASK;
144 }
145 
146 static void xas_set_offset(struct xa_state *xas)
147 {
148 	xas->xa_offset = get_offset(xas->xa_index, xas->xa_node);
149 }
150 
151 /* move the index either forwards (find) or backwards (sibling slot) */
152 static void xas_move_index(struct xa_state *xas, unsigned long offset)
153 {
154 	unsigned int shift = xas->xa_node->shift;
155 	xas->xa_index &= ~XA_CHUNK_MASK << shift;
156 	xas->xa_index += offset << shift;
157 }
158 
159 static void xas_next_offset(struct xa_state *xas)
160 {
161 	xas->xa_offset++;
162 	xas_move_index(xas, xas->xa_offset);
163 }
164 
165 static void *set_bounds(struct xa_state *xas)
166 {
167 	xas->xa_node = XAS_BOUNDS;
168 	return NULL;
169 }
170 
171 /*
172  * Starts a walk.  If the @xas is already valid, we assume that it's on
173  * the right path and just return where we've got to.  If we're in an
174  * error state, return NULL.  If the index is outside the current scope
175  * of the xarray, return NULL without changing @xas->xa_node.  Otherwise
176  * set @xas->xa_node to NULL and return the current head of the array.
177  */
178 static void *xas_start(struct xa_state *xas)
179 {
180 	void *entry;
181 
182 	if (xas_valid(xas))
183 		return xas_reload(xas);
184 	if (xas_error(xas))
185 		return NULL;
186 
187 	entry = xa_head(xas->xa);
188 	if (!xa_is_node(entry)) {
189 		if (xas->xa_index)
190 			return set_bounds(xas);
191 	} else {
192 		if ((xas->xa_index >> xa_to_node(entry)->shift) > XA_CHUNK_MASK)
193 			return set_bounds(xas);
194 	}
195 
196 	xas->xa_node = NULL;
197 	return entry;
198 }
199 
200 static __always_inline void *xas_descend(struct xa_state *xas,
201 					struct xa_node *node)
202 {
203 	unsigned int offset = get_offset(xas->xa_index, node);
204 	void *entry = xa_entry(xas->xa, node, offset);
205 
206 	xas->xa_node = node;
207 	while (xa_is_sibling(entry)) {
208 		offset = xa_to_sibling(entry);
209 		entry = xa_entry(xas->xa, node, offset);
210 		if (node->shift && xa_is_node(entry))
211 			entry = XA_RETRY_ENTRY;
212 	}
213 
214 	xas->xa_offset = offset;
215 	return entry;
216 }
217 
218 /**
219  * xas_load() - Load an entry from the XArray (advanced).
220  * @xas: XArray operation state.
221  *
222  * Usually walks the @xas to the appropriate state to load the entry
223  * stored at xa_index.  However, it will do nothing and return %NULL if
224  * @xas is in an error state.  xas_load() will never expand the tree.
225  *
226  * If the xa_state is set up to operate on a multi-index entry, xas_load()
227  * may return %NULL or an internal entry, even if there are entries
228  * present within the range specified by @xas.
229  *
230  * Context: Any context.  The caller should hold the xa_lock or the RCU lock.
231  * Return: Usually an entry in the XArray, but see description for exceptions.
232  */
233 void *xas_load(struct xa_state *xas)
234 {
235 	void *entry = xas_start(xas);
236 
237 	while (xa_is_node(entry)) {
238 		struct xa_node *node = xa_to_node(entry);
239 
240 		if (xas->xa_shift > node->shift)
241 			break;
242 		entry = xas_descend(xas, node);
243 		if (node->shift == 0)
244 			break;
245 	}
246 	return entry;
247 }
248 EXPORT_SYMBOL_GPL(xas_load);
249 
250 #define XA_RCU_FREE	((struct xarray *)1)
251 
252 static void xa_node_free(struct xa_node *node)
253 {
254 	XA_NODE_BUG_ON(node, !list_empty(&node->private_list));
255 	node->array = XA_RCU_FREE;
256 	call_rcu(&node->rcu_head, radix_tree_node_rcu_free);
257 }
258 
259 /*
260  * xas_destroy() - Free any resources allocated during the XArray operation.
261  * @xas: XArray operation state.
262  *
263  * Most users will not need to call this function; it is called for you
264  * by xas_nomem().
265  */
266 void xas_destroy(struct xa_state *xas)
267 {
268 	struct xa_node *next, *node = xas->xa_alloc;
269 
270 	while (node) {
271 		XA_NODE_BUG_ON(node, !list_empty(&node->private_list));
272 		next = rcu_dereference_raw(node->parent);
273 		radix_tree_node_rcu_free(&node->rcu_head);
274 		xas->xa_alloc = node = next;
275 	}
276 }
277 
278 /**
279  * xas_nomem() - Allocate memory if needed.
280  * @xas: XArray operation state.
281  * @gfp: Memory allocation flags.
282  *
283  * If we need to add new nodes to the XArray, we try to allocate memory
284  * with GFP_NOWAIT while holding the lock, which will usually succeed.
285  * If it fails, @xas is flagged as needing memory to continue.  The caller
286  * should drop the lock and call xas_nomem().  If xas_nomem() succeeds,
287  * the caller should retry the operation.
288  *
289  * Forward progress is guaranteed as one node is allocated here and
290  * stored in the xa_state where it will be found by xas_alloc().  More
291  * nodes will likely be found in the slab allocator, but we do not tie
292  * them up here.
293  *
294  * Return: true if memory was needed, and was successfully allocated.
295  */
296 bool xas_nomem(struct xa_state *xas, gfp_t gfp)
297 {
298 	if (xas->xa_node != XA_ERROR(-ENOMEM)) {
299 		xas_destroy(xas);
300 		return false;
301 	}
302 	if (xas->xa->xa_flags & XA_FLAGS_ACCOUNT)
303 		gfp |= __GFP_ACCOUNT;
304 	xas->xa_alloc = kmem_cache_alloc_lru(radix_tree_node_cachep, xas->xa_lru, gfp);
305 	if (!xas->xa_alloc)
306 		return false;
307 	xas->xa_alloc->parent = NULL;
308 	XA_NODE_BUG_ON(xas->xa_alloc, !list_empty(&xas->xa_alloc->private_list));
309 	xas->xa_node = XAS_RESTART;
310 	return true;
311 }
312 EXPORT_SYMBOL_GPL(xas_nomem);
313 
314 /*
315  * __xas_nomem() - Drop locks and allocate memory if needed.
316  * @xas: XArray operation state.
317  * @gfp: Memory allocation flags.
318  *
319  * Internal variant of xas_nomem().
320  *
321  * Return: true if memory was needed, and was successfully allocated.
322  */
323 static bool __xas_nomem(struct xa_state *xas, gfp_t gfp)
324 	__must_hold(xas->xa->xa_lock)
325 {
326 	unsigned int lock_type = xa_lock_type(xas->xa);
327 
328 	if (xas->xa_node != XA_ERROR(-ENOMEM)) {
329 		xas_destroy(xas);
330 		return false;
331 	}
332 	if (xas->xa->xa_flags & XA_FLAGS_ACCOUNT)
333 		gfp |= __GFP_ACCOUNT;
334 	if (gfpflags_allow_blocking(gfp)) {
335 		xas_unlock_type(xas, lock_type);
336 		xas->xa_alloc = kmem_cache_alloc_lru(radix_tree_node_cachep, xas->xa_lru, gfp);
337 		xas_lock_type(xas, lock_type);
338 	} else {
339 		xas->xa_alloc = kmem_cache_alloc_lru(radix_tree_node_cachep, xas->xa_lru, gfp);
340 	}
341 	if (!xas->xa_alloc)
342 		return false;
343 	xas->xa_alloc->parent = NULL;
344 	XA_NODE_BUG_ON(xas->xa_alloc, !list_empty(&xas->xa_alloc->private_list));
345 	xas->xa_node = XAS_RESTART;
346 	return true;
347 }
348 
349 static void xas_update(struct xa_state *xas, struct xa_node *node)
350 {
351 	if (xas->xa_update)
352 		xas->xa_update(node);
353 	else
354 		XA_NODE_BUG_ON(node, !list_empty(&node->private_list));
355 }
356 
357 static void *xas_alloc(struct xa_state *xas, unsigned int shift)
358 {
359 	struct xa_node *parent = xas->xa_node;
360 	struct xa_node *node = xas->xa_alloc;
361 
362 	if (xas_invalid(xas))
363 		return NULL;
364 
365 	if (node) {
366 		xas->xa_alloc = NULL;
367 	} else {
368 		gfp_t gfp = GFP_NOWAIT | __GFP_NOWARN;
369 
370 		if (xas->xa->xa_flags & XA_FLAGS_ACCOUNT)
371 			gfp |= __GFP_ACCOUNT;
372 
373 		node = kmem_cache_alloc_lru(radix_tree_node_cachep, xas->xa_lru, gfp);
374 		if (!node) {
375 			xas_set_err(xas, -ENOMEM);
376 			return NULL;
377 		}
378 	}
379 
380 	if (parent) {
381 		node->offset = xas->xa_offset;
382 		parent->count++;
383 		XA_NODE_BUG_ON(node, parent->count > XA_CHUNK_SIZE);
384 		xas_update(xas, parent);
385 	}
386 	XA_NODE_BUG_ON(node, shift > BITS_PER_LONG);
387 	XA_NODE_BUG_ON(node, !list_empty(&node->private_list));
388 	node->shift = shift;
389 	node->count = 0;
390 	node->nr_values = 0;
391 	RCU_INIT_POINTER(node->parent, xas->xa_node);
392 	node->array = xas->xa;
393 
394 	return node;
395 }
396 
397 #ifdef CONFIG_XARRAY_MULTI
398 /* Returns the number of indices covered by a given xa_state */
399 static unsigned long xas_size(const struct xa_state *xas)
400 {
401 	return (xas->xa_sibs + 1UL) << xas->xa_shift;
402 }
403 #endif
404 
405 /*
406  * Use this to calculate the maximum index that will need to be created
407  * in order to add the entry described by @xas.  Because we cannot store a
408  * multi-index entry at index 0, the calculation is a little more complex
409  * than you might expect.
410  */
411 static unsigned long xas_max(struct xa_state *xas)
412 {
413 	unsigned long max = xas->xa_index;
414 
415 #ifdef CONFIG_XARRAY_MULTI
416 	if (xas->xa_shift || xas->xa_sibs) {
417 		unsigned long mask = xas_size(xas) - 1;
418 		max |= mask;
419 		if (mask == max)
420 			max++;
421 	}
422 #endif
423 
424 	return max;
425 }
426 
427 /* The maximum index that can be contained in the array without expanding it */
428 static unsigned long max_index(void *entry)
429 {
430 	if (!xa_is_node(entry))
431 		return 0;
432 	return (XA_CHUNK_SIZE << xa_to_node(entry)->shift) - 1;
433 }
434 
435 static inline void *xa_zero_to_null(void *entry)
436 {
437 	return xa_is_zero(entry) ? NULL : entry;
438 }
439 
440 static void xas_shrink(struct xa_state *xas)
441 {
442 	struct xarray *xa = xas->xa;
443 	struct xa_node *node = xas->xa_node;
444 
445 	for (;;) {
446 		void *entry;
447 
448 		XA_NODE_BUG_ON(node, node->count > XA_CHUNK_SIZE);
449 		if (node->count != 1)
450 			break;
451 		entry = xa_entry_locked(xa, node, 0);
452 		if (!entry)
453 			break;
454 		if (!xa_is_node(entry) && node->shift)
455 			break;
456 		if (xa_zero_busy(xa))
457 			entry = xa_zero_to_null(entry);
458 		xas->xa_node = XAS_BOUNDS;
459 
460 		RCU_INIT_POINTER(xa->xa_head, entry);
461 		if (xa_track_free(xa) && !node_get_mark(node, 0, XA_FREE_MARK))
462 			xa_mark_clear(xa, XA_FREE_MARK);
463 
464 		node->count = 0;
465 		node->nr_values = 0;
466 		if (!xa_is_node(entry))
467 			RCU_INIT_POINTER(node->slots[0], XA_RETRY_ENTRY);
468 		xas_update(xas, node);
469 		xa_node_free(node);
470 		if (!xa_is_node(entry))
471 			break;
472 		node = xa_to_node(entry);
473 		node->parent = NULL;
474 	}
475 }
476 
477 /*
478  * xas_delete_node() - Attempt to delete an xa_node
479  * @xas: Array operation state.
480  *
481  * Attempts to delete the @xas->xa_node.  This will fail if xa->node has
482  * a non-zero reference count.
483  */
484 static void xas_delete_node(struct xa_state *xas)
485 {
486 	struct xa_node *node = xas->xa_node;
487 
488 	for (;;) {
489 		struct xa_node *parent;
490 
491 		XA_NODE_BUG_ON(node, node->count > XA_CHUNK_SIZE);
492 		if (node->count)
493 			break;
494 
495 		parent = xa_parent_locked(xas->xa, node);
496 		xas->xa_node = parent;
497 		xas->xa_offset = node->offset;
498 		xa_node_free(node);
499 
500 		if (!parent) {
501 			xas->xa->xa_head = NULL;
502 			xas->xa_node = XAS_BOUNDS;
503 			return;
504 		}
505 
506 		parent->slots[xas->xa_offset] = NULL;
507 		parent->count--;
508 		XA_NODE_BUG_ON(parent, parent->count > XA_CHUNK_SIZE);
509 		node = parent;
510 		xas_update(xas, node);
511 	}
512 
513 	if (!node->parent)
514 		xas_shrink(xas);
515 }
516 
517 /**
518  * xas_free_nodes() - Free this node and all nodes that it references
519  * @xas: Array operation state.
520  * @top: Node to free
521  *
522  * This node has been removed from the tree.  We must now free it and all
523  * of its subnodes.  There may be RCU walkers with references into the tree,
524  * so we must replace all entries with retry markers.
525  */
526 static void xas_free_nodes(struct xa_state *xas, struct xa_node *top)
527 {
528 	unsigned int offset = 0;
529 	struct xa_node *node = top;
530 
531 	for (;;) {
532 		void *entry = xa_entry_locked(xas->xa, node, offset);
533 
534 		if (node->shift && xa_is_node(entry)) {
535 			node = xa_to_node(entry);
536 			offset = 0;
537 			continue;
538 		}
539 		if (entry)
540 			RCU_INIT_POINTER(node->slots[offset], XA_RETRY_ENTRY);
541 		offset++;
542 		while (offset == XA_CHUNK_SIZE) {
543 			struct xa_node *parent;
544 
545 			parent = xa_parent_locked(xas->xa, node);
546 			offset = node->offset + 1;
547 			node->count = 0;
548 			node->nr_values = 0;
549 			xas_update(xas, node);
550 			xa_node_free(node);
551 			if (node == top)
552 				return;
553 			node = parent;
554 		}
555 	}
556 }
557 
558 /*
559  * xas_expand adds nodes to the head of the tree until it has reached
560  * sufficient height to be able to contain @xas->xa_index
561  */
562 static int xas_expand(struct xa_state *xas, void *head)
563 {
564 	struct xarray *xa = xas->xa;
565 	struct xa_node *node = NULL;
566 	unsigned int shift = 0;
567 	unsigned long max = xas_max(xas);
568 
569 	if (!head) {
570 		if (max == 0)
571 			return 0;
572 		while ((max >> shift) >= XA_CHUNK_SIZE)
573 			shift += XA_CHUNK_SHIFT;
574 		return shift + XA_CHUNK_SHIFT;
575 	} else if (xa_is_node(head)) {
576 		node = xa_to_node(head);
577 		shift = node->shift + XA_CHUNK_SHIFT;
578 	}
579 	xas->xa_node = NULL;
580 
581 	while (max > max_index(head)) {
582 		xa_mark_t mark = 0;
583 
584 		XA_NODE_BUG_ON(node, shift > BITS_PER_LONG);
585 		node = xas_alloc(xas, shift);
586 		if (!node)
587 			return -ENOMEM;
588 
589 		node->count = 1;
590 		if (xa_is_value(head))
591 			node->nr_values = 1;
592 		RCU_INIT_POINTER(node->slots[0], head);
593 
594 		/* Propagate the aggregated mark info to the new child */
595 		for (;;) {
596 			if (xa_track_free(xa) && mark == XA_FREE_MARK) {
597 				node_mark_all(node, XA_FREE_MARK);
598 				if (!xa_marked(xa, XA_FREE_MARK)) {
599 					node_clear_mark(node, 0, XA_FREE_MARK);
600 					xa_mark_set(xa, XA_FREE_MARK);
601 				}
602 			} else if (xa_marked(xa, mark)) {
603 				node_set_mark(node, 0, mark);
604 			}
605 			if (mark == XA_MARK_MAX)
606 				break;
607 			mark_inc(mark);
608 		}
609 
610 		/*
611 		 * Now that the new node is fully initialised, we can add
612 		 * it to the tree
613 		 */
614 		if (xa_is_node(head)) {
615 			xa_to_node(head)->offset = 0;
616 			rcu_assign_pointer(xa_to_node(head)->parent, node);
617 		}
618 		head = xa_mk_node(node);
619 		rcu_assign_pointer(xa->xa_head, head);
620 		xas_update(xas, node);
621 
622 		shift += XA_CHUNK_SHIFT;
623 	}
624 
625 	xas->xa_node = node;
626 	return shift;
627 }
628 
629 /*
630  * xas_create() - Create a slot to store an entry in.
631  * @xas: XArray operation state.
632  * @allow_root: %true if we can store the entry in the root directly
633  *
634  * Most users will not need to call this function directly, as it is called
635  * by xas_store().  It is useful for doing conditional store operations
636  * (see the xa_cmpxchg() implementation for an example).
637  *
638  * Return: If the slot already existed, returns the contents of this slot.
639  * If the slot was newly created, returns %NULL.  If it failed to create the
640  * slot, returns %NULL and indicates the error in @xas.
641  */
642 static void *xas_create(struct xa_state *xas, bool allow_root)
643 {
644 	struct xarray *xa = xas->xa;
645 	void *entry;
646 	void __rcu **slot;
647 	struct xa_node *node = xas->xa_node;
648 	int shift;
649 	unsigned int order = xas->xa_shift;
650 
651 	if (xas_top(node)) {
652 		entry = xa_head_locked(xa);
653 		xas->xa_node = NULL;
654 		if (!entry && xa_zero_busy(xa))
655 			entry = XA_ZERO_ENTRY;
656 		shift = xas_expand(xas, entry);
657 		if (shift < 0)
658 			return NULL;
659 		if (!shift && !allow_root)
660 			shift = XA_CHUNK_SHIFT;
661 		entry = xa_head_locked(xa);
662 		slot = &xa->xa_head;
663 	} else if (xas_error(xas)) {
664 		return NULL;
665 	} else if (node) {
666 		unsigned int offset = xas->xa_offset;
667 
668 		shift = node->shift;
669 		entry = xa_entry_locked(xa, node, offset);
670 		slot = &node->slots[offset];
671 	} else {
672 		shift = 0;
673 		entry = xa_head_locked(xa);
674 		slot = &xa->xa_head;
675 	}
676 
677 	while (shift > order) {
678 		shift -= XA_CHUNK_SHIFT;
679 		if (!entry) {
680 			node = xas_alloc(xas, shift);
681 			if (!node)
682 				break;
683 			if (xa_track_free(xa))
684 				node_mark_all(node, XA_FREE_MARK);
685 			rcu_assign_pointer(*slot, xa_mk_node(node));
686 		} else if (xa_is_node(entry)) {
687 			node = xa_to_node(entry);
688 		} else {
689 			break;
690 		}
691 		entry = xas_descend(xas, node);
692 		slot = &node->slots[xas->xa_offset];
693 	}
694 
695 	return entry;
696 }
697 
698 /**
699  * xas_create_range() - Ensure that stores to this range will succeed
700  * @xas: XArray operation state.
701  *
702  * Creates all of the slots in the range covered by @xas.  Sets @xas to
703  * create single-index entries and positions it at the beginning of the
704  * range.  This is for the benefit of users which have not yet been
705  * converted to use multi-index entries.
706  */
707 void xas_create_range(struct xa_state *xas)
708 {
709 	unsigned long index = xas->xa_index;
710 	unsigned char shift = xas->xa_shift;
711 	unsigned char sibs = xas->xa_sibs;
712 
713 	xas->xa_index |= ((sibs + 1UL) << shift) - 1;
714 	if (xas_is_node(xas) && xas->xa_node->shift == xas->xa_shift)
715 		xas->xa_offset |= sibs;
716 	xas->xa_shift = 0;
717 	xas->xa_sibs = 0;
718 
719 	for (;;) {
720 		xas_create(xas, true);
721 		if (xas_error(xas))
722 			goto restore;
723 		if (xas->xa_index <= (index | XA_CHUNK_MASK))
724 			goto success;
725 		xas->xa_index -= XA_CHUNK_SIZE;
726 
727 		for (;;) {
728 			struct xa_node *node = xas->xa_node;
729 			if (node->shift >= shift)
730 				break;
731 			xas->xa_node = xa_parent_locked(xas->xa, node);
732 			xas->xa_offset = node->offset - 1;
733 			if (node->offset != 0)
734 				break;
735 		}
736 	}
737 
738 restore:
739 	xas->xa_shift = shift;
740 	xas->xa_sibs = sibs;
741 	xas->xa_index = index;
742 	return;
743 success:
744 	xas->xa_index = index;
745 	if (xas->xa_node)
746 		xas_set_offset(xas);
747 }
748 EXPORT_SYMBOL_GPL(xas_create_range);
749 
750 static void update_node(struct xa_state *xas, struct xa_node *node,
751 		int count, int values)
752 {
753 	if (!node || (!count && !values))
754 		return;
755 
756 	node->count += count;
757 	node->nr_values += values;
758 	XA_NODE_BUG_ON(node, node->count > XA_CHUNK_SIZE);
759 	XA_NODE_BUG_ON(node, node->nr_values > XA_CHUNK_SIZE);
760 	xas_update(xas, node);
761 	if (count < 0)
762 		xas_delete_node(xas);
763 }
764 
765 /**
766  * xas_store() - Store this entry in the XArray.
767  * @xas: XArray operation state.
768  * @entry: New entry.
769  *
770  * If @xas is operating on a multi-index entry, the entry returned by this
771  * function is essentially meaningless (it may be an internal entry or it
772  * may be %NULL, even if there are non-NULL entries at some of the indices
773  * covered by the range).  This is not a problem for any current users,
774  * and can be changed if needed.
775  *
776  * Return: The old entry at this index.
777  */
778 void *xas_store(struct xa_state *xas, void *entry)
779 {
780 	struct xa_node *node;
781 	void __rcu **slot = &xas->xa->xa_head;
782 	unsigned int offset, max;
783 	int count = 0;
784 	int values = 0;
785 	void *first, *next;
786 	bool value = xa_is_value(entry);
787 
788 	if (entry) {
789 		bool allow_root = !xa_is_node(entry) && !xa_is_zero(entry);
790 		first = xas_create(xas, allow_root);
791 	} else {
792 		first = xas_load(xas);
793 	}
794 
795 	if (xas_invalid(xas))
796 		return first;
797 	node = xas->xa_node;
798 	if (node && (xas->xa_shift < node->shift))
799 		xas->xa_sibs = 0;
800 	if ((first == entry) && !xas->xa_sibs)
801 		return first;
802 
803 	next = first;
804 	offset = xas->xa_offset;
805 	max = xas->xa_offset + xas->xa_sibs;
806 	if (node) {
807 		slot = &node->slots[offset];
808 		if (xas->xa_sibs)
809 			xas_squash_marks(xas);
810 	}
811 	if (!entry)
812 		xas_init_marks(xas);
813 
814 	for (;;) {
815 		/*
816 		 * Must clear the marks before setting the entry to NULL,
817 		 * otherwise xas_for_each_marked may find a NULL entry and
818 		 * stop early.  rcu_assign_pointer contains a release barrier
819 		 * so the mark clearing will appear to happen before the
820 		 * entry is set to NULL.
821 		 */
822 		rcu_assign_pointer(*slot, entry);
823 		if (xa_is_node(next) && (!node || node->shift))
824 			xas_free_nodes(xas, xa_to_node(next));
825 		if (!node)
826 			break;
827 		count += !next - !entry;
828 		values += !xa_is_value(first) - !value;
829 		if (entry) {
830 			if (offset == max)
831 				break;
832 			if (!xa_is_sibling(entry))
833 				entry = xa_mk_sibling(xas->xa_offset);
834 		} else {
835 			if (offset == XA_CHUNK_MASK)
836 				break;
837 		}
838 		next = xa_entry_locked(xas->xa, node, ++offset);
839 		if (!xa_is_sibling(next)) {
840 			if (!entry && (offset > max))
841 				break;
842 			first = next;
843 		}
844 		slot++;
845 	}
846 
847 	update_node(xas, node, count, values);
848 	return first;
849 }
850 EXPORT_SYMBOL_GPL(xas_store);
851 
852 /**
853  * xas_get_mark() - Returns the state of this mark.
854  * @xas: XArray operation state.
855  * @mark: Mark number.
856  *
857  * Return: true if the mark is set, false if the mark is clear or @xas
858  * is in an error state.
859  */
860 bool xas_get_mark(const struct xa_state *xas, xa_mark_t mark)
861 {
862 	if (xas_invalid(xas))
863 		return false;
864 	if (!xas->xa_node)
865 		return xa_marked(xas->xa, mark);
866 	return node_get_mark(xas->xa_node, xas->xa_offset, mark);
867 }
868 EXPORT_SYMBOL_GPL(xas_get_mark);
869 
870 /**
871  * xas_set_mark() - Sets the mark on this entry and its parents.
872  * @xas: XArray operation state.
873  * @mark: Mark number.
874  *
875  * Sets the specified mark on this entry, and walks up the tree setting it
876  * on all the ancestor entries.  Does nothing if @xas has not been walked to
877  * an entry, or is in an error state.
878  */
879 void xas_set_mark(const struct xa_state *xas, xa_mark_t mark)
880 {
881 	struct xa_node *node = xas->xa_node;
882 	unsigned int offset = xas->xa_offset;
883 
884 	if (xas_invalid(xas))
885 		return;
886 
887 	while (node) {
888 		if (node_set_mark(node, offset, mark))
889 			return;
890 		offset = node->offset;
891 		node = xa_parent_locked(xas->xa, node);
892 	}
893 
894 	if (!xa_marked(xas->xa, mark))
895 		xa_mark_set(xas->xa, mark);
896 }
897 EXPORT_SYMBOL_GPL(xas_set_mark);
898 
899 /**
900  * xas_clear_mark() - Clears the mark on this entry and its parents.
901  * @xas: XArray operation state.
902  * @mark: Mark number.
903  *
904  * Clears the specified mark on this entry, and walks back to the head
905  * attempting to clear it on all the ancestor entries.  Does nothing if
906  * @xas has not been walked to an entry, or is in an error state.
907  */
908 void xas_clear_mark(const struct xa_state *xas, xa_mark_t mark)
909 {
910 	struct xa_node *node = xas->xa_node;
911 	unsigned int offset = xas->xa_offset;
912 
913 	if (xas_invalid(xas))
914 		return;
915 
916 	while (node) {
917 		if (!node_clear_mark(node, offset, mark))
918 			return;
919 		if (node_any_mark(node, mark))
920 			return;
921 
922 		offset = node->offset;
923 		node = xa_parent_locked(xas->xa, node);
924 	}
925 
926 	if (xa_marked(xas->xa, mark))
927 		xa_mark_clear(xas->xa, mark);
928 }
929 EXPORT_SYMBOL_GPL(xas_clear_mark);
930 
931 /**
932  * xas_init_marks() - Initialise all marks for the entry
933  * @xas: Array operations state.
934  *
935  * Initialise all marks for the entry specified by @xas.  If we're tracking
936  * free entries with a mark, we need to set it on all entries.  All other
937  * marks are cleared.
938  *
939  * This implementation is not as efficient as it could be; we may walk
940  * up the tree multiple times.
941  */
942 void xas_init_marks(const struct xa_state *xas)
943 {
944 	xa_mark_t mark = 0;
945 
946 	for (;;) {
947 		if (xa_track_free(xas->xa) && mark == XA_FREE_MARK)
948 			xas_set_mark(xas, mark);
949 		else
950 			xas_clear_mark(xas, mark);
951 		if (mark == XA_MARK_MAX)
952 			break;
953 		mark_inc(mark);
954 	}
955 }
956 EXPORT_SYMBOL_GPL(xas_init_marks);
957 
958 #ifdef CONFIG_XARRAY_MULTI
959 static unsigned int node_get_marks(struct xa_node *node, unsigned int offset)
960 {
961 	unsigned int marks = 0;
962 	xa_mark_t mark = XA_MARK_0;
963 
964 	for (;;) {
965 		if (node_get_mark(node, offset, mark))
966 			marks |= 1 << (__force unsigned int)mark;
967 		if (mark == XA_MARK_MAX)
968 			break;
969 		mark_inc(mark);
970 	}
971 
972 	return marks;
973 }
974 
975 static inline void node_mark_slots(struct xa_node *node, unsigned int sibs,
976 		xa_mark_t mark)
977 {
978 	int i;
979 
980 	if (sibs == 0)
981 		node_mark_all(node, mark);
982 	else {
983 		for (i = 0; i < XA_CHUNK_SIZE; i += sibs + 1)
984 			node_set_mark(node, i, mark);
985 	}
986 }
987 
988 static void node_set_marks(struct xa_node *node, unsigned int offset,
989 			struct xa_node *child, unsigned int sibs,
990 			unsigned int marks)
991 {
992 	xa_mark_t mark = XA_MARK_0;
993 
994 	for (;;) {
995 		if (marks & (1 << (__force unsigned int)mark)) {
996 			node_set_mark(node, offset, mark);
997 			if (child)
998 				node_mark_slots(child, sibs, mark);
999 		}
1000 		if (mark == XA_MARK_MAX)
1001 			break;
1002 		mark_inc(mark);
1003 	}
1004 }
1005 
1006 /**
1007  * xas_split_alloc() - Allocate memory for splitting an entry.
1008  * @xas: XArray operation state.
1009  * @entry: New entry which will be stored in the array.
1010  * @order: Current entry order.
1011  * @gfp: Memory allocation flags.
1012  *
1013  * This function should be called before calling xas_split().
1014  * If necessary, it will allocate new nodes (and fill them with @entry)
1015  * to prepare for the upcoming split of an entry of @order size into
1016  * entries of the order stored in the @xas.
1017  *
1018  * Context: May sleep if @gfp flags permit.
1019  */
1020 void xas_split_alloc(struct xa_state *xas, void *entry, unsigned int order,
1021 		gfp_t gfp)
1022 {
1023 	unsigned int sibs = (1 << (order % XA_CHUNK_SHIFT)) - 1;
1024 	unsigned int mask = xas->xa_sibs;
1025 
1026 	/* XXX: no support for splitting really large entries yet */
1027 	if (WARN_ON(xas->xa_shift + 2 * XA_CHUNK_SHIFT <= order))
1028 		goto nomem;
1029 	if (xas->xa_shift + XA_CHUNK_SHIFT > order)
1030 		return;
1031 
1032 	do {
1033 		unsigned int i;
1034 		void *sibling = NULL;
1035 		struct xa_node *node;
1036 
1037 		node = kmem_cache_alloc_lru(radix_tree_node_cachep, xas->xa_lru, gfp);
1038 		if (!node)
1039 			goto nomem;
1040 		node->array = xas->xa;
1041 		for (i = 0; i < XA_CHUNK_SIZE; i++) {
1042 			if ((i & mask) == 0) {
1043 				RCU_INIT_POINTER(node->slots[i], entry);
1044 				sibling = xa_mk_sibling(i);
1045 			} else {
1046 				RCU_INIT_POINTER(node->slots[i], sibling);
1047 			}
1048 		}
1049 		RCU_INIT_POINTER(node->parent, xas->xa_alloc);
1050 		xas->xa_alloc = node;
1051 	} while (sibs-- > 0);
1052 
1053 	return;
1054 nomem:
1055 	xas_destroy(xas);
1056 	xas_set_err(xas, -ENOMEM);
1057 }
1058 EXPORT_SYMBOL_GPL(xas_split_alloc);
1059 
1060 /**
1061  * xas_split() - Split a multi-index entry into smaller entries.
1062  * @xas: XArray operation state.
1063  * @entry: New entry to store in the array.
1064  * @order: Current entry order.
1065  *
1066  * The size of the new entries is set in @xas.  The value in @entry is
1067  * copied to all the replacement entries.
1068  *
1069  * Context: Any context.  The caller should hold the xa_lock.
1070  */
1071 void xas_split(struct xa_state *xas, void *entry, unsigned int order)
1072 {
1073 	unsigned int sibs = (1 << (order % XA_CHUNK_SHIFT)) - 1;
1074 	unsigned int offset, marks;
1075 	struct xa_node *node;
1076 	void *curr = xas_load(xas);
1077 	int values = 0;
1078 
1079 	node = xas->xa_node;
1080 	if (xas_top(node))
1081 		return;
1082 
1083 	marks = node_get_marks(node, xas->xa_offset);
1084 
1085 	offset = xas->xa_offset + sibs;
1086 	do {
1087 		if (xas->xa_shift < node->shift) {
1088 			struct xa_node *child = xas->xa_alloc;
1089 
1090 			xas->xa_alloc = rcu_dereference_raw(child->parent);
1091 			child->shift = node->shift - XA_CHUNK_SHIFT;
1092 			child->offset = offset;
1093 			child->count = XA_CHUNK_SIZE;
1094 			child->nr_values = xa_is_value(entry) ?
1095 					XA_CHUNK_SIZE : 0;
1096 			RCU_INIT_POINTER(child->parent, node);
1097 			node_set_marks(node, offset, child, xas->xa_sibs,
1098 					marks);
1099 			rcu_assign_pointer(node->slots[offset],
1100 					xa_mk_node(child));
1101 			if (xa_is_value(curr))
1102 				values--;
1103 			xas_update(xas, child);
1104 		} else {
1105 			unsigned int canon = offset - xas->xa_sibs;
1106 
1107 			node_set_marks(node, canon, NULL, 0, marks);
1108 			rcu_assign_pointer(node->slots[canon], entry);
1109 			while (offset > canon)
1110 				rcu_assign_pointer(node->slots[offset--],
1111 						xa_mk_sibling(canon));
1112 			values += (xa_is_value(entry) - xa_is_value(curr)) *
1113 					(xas->xa_sibs + 1);
1114 		}
1115 	} while (offset-- > xas->xa_offset);
1116 
1117 	node->nr_values += values;
1118 	xas_update(xas, node);
1119 }
1120 EXPORT_SYMBOL_GPL(xas_split);
1121 #endif
1122 
1123 /**
1124  * xas_pause() - Pause a walk to drop a lock.
1125  * @xas: XArray operation state.
1126  *
1127  * Some users need to pause a walk and drop the lock they're holding in
1128  * order to yield to a higher priority thread or carry out an operation
1129  * on an entry.  Those users should call this function before they drop
1130  * the lock.  It resets the @xas to be suitable for the next iteration
1131  * of the loop after the user has reacquired the lock.  If most entries
1132  * found during a walk require you to call xas_pause(), the xa_for_each()
1133  * iterator may be more appropriate.
1134  *
1135  * Note that xas_pause() only works for forward iteration.  If a user needs
1136  * to pause a reverse iteration, we will need a xas_pause_rev().
1137  */
1138 void xas_pause(struct xa_state *xas)
1139 {
1140 	struct xa_node *node = xas->xa_node;
1141 
1142 	if (xas_invalid(xas))
1143 		return;
1144 
1145 	xas->xa_node = XAS_RESTART;
1146 	if (node) {
1147 		unsigned long offset = xas->xa_offset;
1148 		while (++offset < XA_CHUNK_SIZE) {
1149 			if (!xa_is_sibling(xa_entry(xas->xa, node, offset)))
1150 				break;
1151 		}
1152 		xas->xa_index &= ~0UL << node->shift;
1153 		xas->xa_index += (offset - xas->xa_offset) << node->shift;
1154 		if (xas->xa_index == 0)
1155 			xas->xa_node = XAS_BOUNDS;
1156 	} else {
1157 		xas->xa_index++;
1158 	}
1159 }
1160 EXPORT_SYMBOL_GPL(xas_pause);
1161 
1162 /*
1163  * __xas_prev() - Find the previous entry in the XArray.
1164  * @xas: XArray operation state.
1165  *
1166  * Helper function for xas_prev() which handles all the complex cases
1167  * out of line.
1168  */
1169 void *__xas_prev(struct xa_state *xas)
1170 {
1171 	void *entry;
1172 
1173 	if (!xas_frozen(xas->xa_node))
1174 		xas->xa_index--;
1175 	if (!xas->xa_node)
1176 		return set_bounds(xas);
1177 	if (xas_not_node(xas->xa_node))
1178 		return xas_load(xas);
1179 
1180 	if (xas->xa_offset != get_offset(xas->xa_index, xas->xa_node))
1181 		xas->xa_offset--;
1182 
1183 	while (xas->xa_offset == 255) {
1184 		xas->xa_offset = xas->xa_node->offset - 1;
1185 		xas->xa_node = xa_parent(xas->xa, xas->xa_node);
1186 		if (!xas->xa_node)
1187 			return set_bounds(xas);
1188 	}
1189 
1190 	for (;;) {
1191 		entry = xa_entry(xas->xa, xas->xa_node, xas->xa_offset);
1192 		if (!xa_is_node(entry))
1193 			return entry;
1194 
1195 		xas->xa_node = xa_to_node(entry);
1196 		xas_set_offset(xas);
1197 	}
1198 }
1199 EXPORT_SYMBOL_GPL(__xas_prev);
1200 
1201 /*
1202  * __xas_next() - Find the next entry in the XArray.
1203  * @xas: XArray operation state.
1204  *
1205  * Helper function for xas_next() which handles all the complex cases
1206  * out of line.
1207  */
1208 void *__xas_next(struct xa_state *xas)
1209 {
1210 	void *entry;
1211 
1212 	if (!xas_frozen(xas->xa_node))
1213 		xas->xa_index++;
1214 	if (!xas->xa_node)
1215 		return set_bounds(xas);
1216 	if (xas_not_node(xas->xa_node))
1217 		return xas_load(xas);
1218 
1219 	if (xas->xa_offset != get_offset(xas->xa_index, xas->xa_node))
1220 		xas->xa_offset++;
1221 
1222 	while (xas->xa_offset == XA_CHUNK_SIZE) {
1223 		xas->xa_offset = xas->xa_node->offset + 1;
1224 		xas->xa_node = xa_parent(xas->xa, xas->xa_node);
1225 		if (!xas->xa_node)
1226 			return set_bounds(xas);
1227 	}
1228 
1229 	for (;;) {
1230 		entry = xa_entry(xas->xa, xas->xa_node, xas->xa_offset);
1231 		if (!xa_is_node(entry))
1232 			return entry;
1233 
1234 		xas->xa_node = xa_to_node(entry);
1235 		xas_set_offset(xas);
1236 	}
1237 }
1238 EXPORT_SYMBOL_GPL(__xas_next);
1239 
1240 /**
1241  * xas_find() - Find the next present entry in the XArray.
1242  * @xas: XArray operation state.
1243  * @max: Highest index to return.
1244  *
1245  * If the @xas has not yet been walked to an entry, return the entry
1246  * which has an index >= xas.xa_index.  If it has been walked, the entry
1247  * currently being pointed at has been processed, and so we move to the
1248  * next entry.
1249  *
1250  * If no entry is found and the array is smaller than @max, the iterator
1251  * is set to the smallest index not yet in the array.  This allows @xas
1252  * to be immediately passed to xas_store().
1253  *
1254  * Return: The entry, if found, otherwise %NULL.
1255  */
1256 void *xas_find(struct xa_state *xas, unsigned long max)
1257 {
1258 	void *entry;
1259 
1260 	if (xas_error(xas) || xas->xa_node == XAS_BOUNDS)
1261 		return NULL;
1262 	if (xas->xa_index > max)
1263 		return set_bounds(xas);
1264 
1265 	if (!xas->xa_node) {
1266 		xas->xa_index = 1;
1267 		return set_bounds(xas);
1268 	} else if (xas->xa_node == XAS_RESTART) {
1269 		entry = xas_load(xas);
1270 		if (entry || xas_not_node(xas->xa_node))
1271 			return entry;
1272 	} else if (!xas->xa_node->shift &&
1273 		    xas->xa_offset != (xas->xa_index & XA_CHUNK_MASK)) {
1274 		xas->xa_offset = ((xas->xa_index - 1) & XA_CHUNK_MASK) + 1;
1275 	}
1276 
1277 	xas_next_offset(xas);
1278 
1279 	while (xas->xa_node && (xas->xa_index <= max)) {
1280 		if (unlikely(xas->xa_offset == XA_CHUNK_SIZE)) {
1281 			xas->xa_offset = xas->xa_node->offset + 1;
1282 			xas->xa_node = xa_parent(xas->xa, xas->xa_node);
1283 			continue;
1284 		}
1285 
1286 		entry = xa_entry(xas->xa, xas->xa_node, xas->xa_offset);
1287 		if (xa_is_node(entry)) {
1288 			xas->xa_node = xa_to_node(entry);
1289 			xas->xa_offset = 0;
1290 			continue;
1291 		}
1292 		if (entry && !xa_is_sibling(entry))
1293 			return entry;
1294 
1295 		xas_next_offset(xas);
1296 	}
1297 
1298 	if (!xas->xa_node)
1299 		xas->xa_node = XAS_BOUNDS;
1300 	return NULL;
1301 }
1302 EXPORT_SYMBOL_GPL(xas_find);
1303 
1304 /**
1305  * xas_find_marked() - Find the next marked entry in the XArray.
1306  * @xas: XArray operation state.
1307  * @max: Highest index to return.
1308  * @mark: Mark number to search for.
1309  *
1310  * If the @xas has not yet been walked to an entry, return the marked entry
1311  * which has an index >= xas.xa_index.  If it has been walked, the entry
1312  * currently being pointed at has been processed, and so we return the
1313  * first marked entry with an index > xas.xa_index.
1314  *
1315  * If no marked entry is found and the array is smaller than @max, @xas is
1316  * set to the bounds state and xas->xa_index is set to the smallest index
1317  * not yet in the array.  This allows @xas to be immediately passed to
1318  * xas_store().
1319  *
1320  * If no entry is found before @max is reached, @xas is set to the restart
1321  * state.
1322  *
1323  * Return: The entry, if found, otherwise %NULL.
1324  */
1325 void *xas_find_marked(struct xa_state *xas, unsigned long max, xa_mark_t mark)
1326 {
1327 	bool advance = true;
1328 	unsigned int offset;
1329 	void *entry;
1330 
1331 	if (xas_error(xas))
1332 		return NULL;
1333 	if (xas->xa_index > max)
1334 		goto max;
1335 
1336 	if (!xas->xa_node) {
1337 		xas->xa_index = 1;
1338 		goto out;
1339 	} else if (xas_top(xas->xa_node)) {
1340 		advance = false;
1341 		entry = xa_head(xas->xa);
1342 		xas->xa_node = NULL;
1343 		if (xas->xa_index > max_index(entry))
1344 			goto out;
1345 		if (!xa_is_node(entry)) {
1346 			if (xa_marked(xas->xa, mark))
1347 				return entry;
1348 			xas->xa_index = 1;
1349 			goto out;
1350 		}
1351 		xas->xa_node = xa_to_node(entry);
1352 		xas->xa_offset = xas->xa_index >> xas->xa_node->shift;
1353 	}
1354 
1355 	while (xas->xa_index <= max) {
1356 		if (unlikely(xas->xa_offset == XA_CHUNK_SIZE)) {
1357 			xas->xa_offset = xas->xa_node->offset + 1;
1358 			xas->xa_node = xa_parent(xas->xa, xas->xa_node);
1359 			if (!xas->xa_node)
1360 				break;
1361 			advance = false;
1362 			continue;
1363 		}
1364 
1365 		if (!advance) {
1366 			entry = xa_entry(xas->xa, xas->xa_node, xas->xa_offset);
1367 			if (xa_is_sibling(entry)) {
1368 				xas->xa_offset = xa_to_sibling(entry);
1369 				xas_move_index(xas, xas->xa_offset);
1370 			}
1371 		}
1372 
1373 		offset = xas_find_chunk(xas, advance, mark);
1374 		if (offset > xas->xa_offset) {
1375 			advance = false;
1376 			xas_move_index(xas, offset);
1377 			/* Mind the wrap */
1378 			if ((xas->xa_index - 1) >= max)
1379 				goto max;
1380 			xas->xa_offset = offset;
1381 			if (offset == XA_CHUNK_SIZE)
1382 				continue;
1383 		}
1384 
1385 		entry = xa_entry(xas->xa, xas->xa_node, xas->xa_offset);
1386 		if (!entry && !(xa_track_free(xas->xa) && mark == XA_FREE_MARK))
1387 			continue;
1388 		if (xa_is_sibling(entry))
1389 			continue;
1390 		if (!xa_is_node(entry))
1391 			return entry;
1392 		xas->xa_node = xa_to_node(entry);
1393 		xas_set_offset(xas);
1394 	}
1395 
1396 out:
1397 	if (xas->xa_index > max)
1398 		goto max;
1399 	return set_bounds(xas);
1400 max:
1401 	xas->xa_node = XAS_RESTART;
1402 	return NULL;
1403 }
1404 EXPORT_SYMBOL_GPL(xas_find_marked);
1405 
1406 /**
1407  * xas_find_conflict() - Find the next present entry in a range.
1408  * @xas: XArray operation state.
1409  *
1410  * The @xas describes both a range and a position within that range.
1411  *
1412  * Context: Any context.  Expects xa_lock to be held.
1413  * Return: The next entry in the range covered by @xas or %NULL.
1414  */
1415 void *xas_find_conflict(struct xa_state *xas)
1416 {
1417 	void *curr;
1418 
1419 	if (xas_error(xas))
1420 		return NULL;
1421 
1422 	if (!xas->xa_node)
1423 		return NULL;
1424 
1425 	if (xas_top(xas->xa_node)) {
1426 		curr = xas_start(xas);
1427 		if (!curr)
1428 			return NULL;
1429 		while (xa_is_node(curr)) {
1430 			struct xa_node *node = xa_to_node(curr);
1431 			curr = xas_descend(xas, node);
1432 		}
1433 		if (curr)
1434 			return curr;
1435 	}
1436 
1437 	if (xas->xa_node->shift > xas->xa_shift)
1438 		return NULL;
1439 
1440 	for (;;) {
1441 		if (xas->xa_node->shift == xas->xa_shift) {
1442 			if ((xas->xa_offset & xas->xa_sibs) == xas->xa_sibs)
1443 				break;
1444 		} else if (xas->xa_offset == XA_CHUNK_MASK) {
1445 			xas->xa_offset = xas->xa_node->offset;
1446 			xas->xa_node = xa_parent_locked(xas->xa, xas->xa_node);
1447 			if (!xas->xa_node)
1448 				break;
1449 			continue;
1450 		}
1451 		curr = xa_entry_locked(xas->xa, xas->xa_node, ++xas->xa_offset);
1452 		if (xa_is_sibling(curr))
1453 			continue;
1454 		while (xa_is_node(curr)) {
1455 			xas->xa_node = xa_to_node(curr);
1456 			xas->xa_offset = 0;
1457 			curr = xa_entry_locked(xas->xa, xas->xa_node, 0);
1458 		}
1459 		if (curr)
1460 			return curr;
1461 	}
1462 	xas->xa_offset -= xas->xa_sibs;
1463 	return NULL;
1464 }
1465 EXPORT_SYMBOL_GPL(xas_find_conflict);
1466 
1467 /**
1468  * xa_load() - Load an entry from an XArray.
1469  * @xa: XArray.
1470  * @index: index into array.
1471  *
1472  * Context: Any context.  Takes and releases the RCU lock.
1473  * Return: The entry at @index in @xa.
1474  */
1475 void *xa_load(struct xarray *xa, unsigned long index)
1476 {
1477 	XA_STATE(xas, xa, index);
1478 	void *entry;
1479 
1480 	rcu_read_lock();
1481 	do {
1482 		entry = xa_zero_to_null(xas_load(&xas));
1483 	} while (xas_retry(&xas, entry));
1484 	rcu_read_unlock();
1485 
1486 	return entry;
1487 }
1488 EXPORT_SYMBOL(xa_load);
1489 
1490 static void *xas_result(struct xa_state *xas, void *curr)
1491 {
1492 	if (xas_error(xas))
1493 		curr = xas->xa_node;
1494 	return curr;
1495 }
1496 
1497 /**
1498  * __xa_erase() - Erase this entry from the XArray while locked.
1499  * @xa: XArray.
1500  * @index: Index into array.
1501  *
1502  * After this function returns, loading from @index will return %NULL.
1503  * If the index is part of a multi-index entry, all indices will be erased
1504  * and none of the entries will be part of a multi-index entry.
1505  *
1506  * Context: Any context.  Expects xa_lock to be held on entry.
1507  * Return: The entry which used to be at this index.
1508  */
1509 void *__xa_erase(struct xarray *xa, unsigned long index)
1510 {
1511 	XA_STATE(xas, xa, index);
1512 	return xas_result(&xas, xa_zero_to_null(xas_store(&xas, NULL)));
1513 }
1514 EXPORT_SYMBOL(__xa_erase);
1515 
1516 /**
1517  * xa_erase() - Erase this entry from the XArray.
1518  * @xa: XArray.
1519  * @index: Index of entry.
1520  *
1521  * After this function returns, loading from @index will return %NULL.
1522  * If the index is part of a multi-index entry, all indices will be erased
1523  * and none of the entries will be part of a multi-index entry.
1524  *
1525  * Context: Any context.  Takes and releases the xa_lock.
1526  * Return: The entry which used to be at this index.
1527  */
1528 void *xa_erase(struct xarray *xa, unsigned long index)
1529 {
1530 	void *entry;
1531 
1532 	xa_lock(xa);
1533 	entry = __xa_erase(xa, index);
1534 	xa_unlock(xa);
1535 
1536 	return entry;
1537 }
1538 EXPORT_SYMBOL(xa_erase);
1539 
1540 /**
1541  * __xa_store() - Store this entry in the XArray.
1542  * @xa: XArray.
1543  * @index: Index into array.
1544  * @entry: New entry.
1545  * @gfp: Memory allocation flags.
1546  *
1547  * You must already be holding the xa_lock when calling this function.
1548  * It will drop the lock if needed to allocate memory, and then reacquire
1549  * it afterwards.
1550  *
1551  * Context: Any context.  Expects xa_lock to be held on entry.  May
1552  * release and reacquire xa_lock if @gfp flags permit.
1553  * Return: The old entry at this index or xa_err() if an error happened.
1554  */
1555 void *__xa_store(struct xarray *xa, unsigned long index, void *entry, gfp_t gfp)
1556 {
1557 	XA_STATE(xas, xa, index);
1558 	void *curr;
1559 
1560 	if (WARN_ON_ONCE(xa_is_advanced(entry)))
1561 		return XA_ERROR(-EINVAL);
1562 	if (xa_track_free(xa) && !entry)
1563 		entry = XA_ZERO_ENTRY;
1564 
1565 	do {
1566 		curr = xas_store(&xas, entry);
1567 		if (xa_track_free(xa))
1568 			xas_clear_mark(&xas, XA_FREE_MARK);
1569 	} while (__xas_nomem(&xas, gfp));
1570 
1571 	return xas_result(&xas, xa_zero_to_null(curr));
1572 }
1573 EXPORT_SYMBOL(__xa_store);
1574 
1575 /**
1576  * xa_store() - Store this entry in the XArray.
1577  * @xa: XArray.
1578  * @index: Index into array.
1579  * @entry: New entry.
1580  * @gfp: Memory allocation flags.
1581  *
1582  * After this function returns, loads from this index will return @entry.
1583  * Storing into an existing multi-index entry updates the entry of every index.
1584  * The marks associated with @index are unaffected unless @entry is %NULL.
1585  *
1586  * Context: Any context.  Takes and releases the xa_lock.
1587  * May sleep if the @gfp flags permit.
1588  * Return: The old entry at this index on success, xa_err(-EINVAL) if @entry
1589  * cannot be stored in an XArray, or xa_err(-ENOMEM) if memory allocation
1590  * failed.
1591  */
1592 void *xa_store(struct xarray *xa, unsigned long index, void *entry, gfp_t gfp)
1593 {
1594 	void *curr;
1595 
1596 	xa_lock(xa);
1597 	curr = __xa_store(xa, index, entry, gfp);
1598 	xa_unlock(xa);
1599 
1600 	return curr;
1601 }
1602 EXPORT_SYMBOL(xa_store);
1603 
1604 static inline void *__xa_cmpxchg_raw(struct xarray *xa, unsigned long index,
1605 			void *old, void *entry, gfp_t gfp);
1606 
1607 /**
1608  * __xa_cmpxchg() - Store this entry in the XArray.
1609  * @xa: XArray.
1610  * @index: Index into array.
1611  * @old: Old value to test against.
1612  * @entry: New entry.
1613  * @gfp: Memory allocation flags.
1614  *
1615  * You must already be holding the xa_lock when calling this function.
1616  * It will drop the lock if needed to allocate memory, and then reacquire
1617  * it afterwards.
1618  *
1619  * Context: Any context.  Expects xa_lock to be held on entry.  May
1620  * release and reacquire xa_lock if @gfp flags permit.
1621  * Return: The old entry at this index or xa_err() if an error happened.
1622  */
1623 void *__xa_cmpxchg(struct xarray *xa, unsigned long index,
1624 			void *old, void *entry, gfp_t gfp)
1625 {
1626 	return xa_zero_to_null(__xa_cmpxchg_raw(xa, index, old, entry, gfp));
1627 }
1628 EXPORT_SYMBOL(__xa_cmpxchg);
1629 
1630 static inline void *__xa_cmpxchg_raw(struct xarray *xa, unsigned long index,
1631 			void *old, void *entry, gfp_t gfp)
1632 {
1633 	XA_STATE(xas, xa, index);
1634 	void *curr;
1635 
1636 	if (WARN_ON_ONCE(xa_is_advanced(entry)))
1637 		return XA_ERROR(-EINVAL);
1638 
1639 	do {
1640 		curr = xas_load(&xas);
1641 		if (curr == old) {
1642 			xas_store(&xas, entry);
1643 			if (xa_track_free(xa) && entry && !curr)
1644 				xas_clear_mark(&xas, XA_FREE_MARK);
1645 		}
1646 	} while (__xas_nomem(&xas, gfp));
1647 
1648 	return xas_result(&xas, curr);
1649 }
1650 
1651 /**
1652  * __xa_insert() - Store this entry in the XArray if no entry is present.
1653  * @xa: XArray.
1654  * @index: Index into array.
1655  * @entry: New entry.
1656  * @gfp: Memory allocation flags.
1657  *
1658  * Inserting a NULL entry will store a reserved entry (like xa_reserve())
1659  * if no entry is present.  Inserting will fail if a reserved entry is
1660  * present, even though loading from this index will return NULL.
1661  *
1662  * Context: Any context.  Expects xa_lock to be held on entry.  May
1663  * release and reacquire xa_lock if @gfp flags permit.
1664  * Return: 0 if the store succeeded.  -EBUSY if another entry was present.
1665  * -ENOMEM if memory could not be allocated.
1666  */
1667 int __xa_insert(struct xarray *xa, unsigned long index, void *entry, gfp_t gfp)
1668 {
1669 	void *curr;
1670 	int errno;
1671 
1672 	if (!entry)
1673 		entry = XA_ZERO_ENTRY;
1674 	curr = __xa_cmpxchg_raw(xa, index, NULL, entry, gfp);
1675 	errno = xa_err(curr);
1676 	if (errno)
1677 		return errno;
1678 	return (curr != NULL) ? -EBUSY : 0;
1679 }
1680 EXPORT_SYMBOL(__xa_insert);
1681 
1682 #ifdef CONFIG_XARRAY_MULTI
1683 static void xas_set_range(struct xa_state *xas, unsigned long first,
1684 		unsigned long last)
1685 {
1686 	unsigned int shift = 0;
1687 	unsigned long sibs = last - first;
1688 	unsigned int offset = XA_CHUNK_MASK;
1689 
1690 	xas_set(xas, first);
1691 
1692 	while ((first & XA_CHUNK_MASK) == 0) {
1693 		if (sibs < XA_CHUNK_MASK)
1694 			break;
1695 		if ((sibs == XA_CHUNK_MASK) && (offset < XA_CHUNK_MASK))
1696 			break;
1697 		shift += XA_CHUNK_SHIFT;
1698 		if (offset == XA_CHUNK_MASK)
1699 			offset = sibs & XA_CHUNK_MASK;
1700 		sibs >>= XA_CHUNK_SHIFT;
1701 		first >>= XA_CHUNK_SHIFT;
1702 	}
1703 
1704 	offset = first & XA_CHUNK_MASK;
1705 	if (offset + sibs > XA_CHUNK_MASK)
1706 		sibs = XA_CHUNK_MASK - offset;
1707 	if ((((first + sibs + 1) << shift) - 1) > last)
1708 		sibs -= 1;
1709 
1710 	xas->xa_shift = shift;
1711 	xas->xa_sibs = sibs;
1712 }
1713 
1714 /**
1715  * xa_store_range() - Store this entry at a range of indices in the XArray.
1716  * @xa: XArray.
1717  * @first: First index to affect.
1718  * @last: Last index to affect.
1719  * @entry: New entry.
1720  * @gfp: Memory allocation flags.
1721  *
1722  * After this function returns, loads from any index between @first and @last,
1723  * inclusive will return @entry.
1724  * Storing into an existing multi-index entry updates the entry of every index.
1725  * The marks associated with @index are unaffected unless @entry is %NULL.
1726  *
1727  * Context: Process context.  Takes and releases the xa_lock.  May sleep
1728  * if the @gfp flags permit.
1729  * Return: %NULL on success, xa_err(-EINVAL) if @entry cannot be stored in
1730  * an XArray, or xa_err(-ENOMEM) if memory allocation failed.
1731  */
1732 void *xa_store_range(struct xarray *xa, unsigned long first,
1733 		unsigned long last, void *entry, gfp_t gfp)
1734 {
1735 	XA_STATE(xas, xa, 0);
1736 
1737 	if (WARN_ON_ONCE(xa_is_internal(entry)))
1738 		return XA_ERROR(-EINVAL);
1739 	if (last < first)
1740 		return XA_ERROR(-EINVAL);
1741 
1742 	do {
1743 		xas_lock(&xas);
1744 		if (entry) {
1745 			unsigned int order = BITS_PER_LONG;
1746 			if (last + 1)
1747 				order = __ffs(last + 1);
1748 			xas_set_order(&xas, last, order);
1749 			xas_create(&xas, true);
1750 			if (xas_error(&xas))
1751 				goto unlock;
1752 		}
1753 		do {
1754 			xas_set_range(&xas, first, last);
1755 			xas_store(&xas, entry);
1756 			if (xas_error(&xas))
1757 				goto unlock;
1758 			first += xas_size(&xas);
1759 		} while (first <= last);
1760 unlock:
1761 		xas_unlock(&xas);
1762 	} while (xas_nomem(&xas, gfp));
1763 
1764 	return xas_result(&xas, NULL);
1765 }
1766 EXPORT_SYMBOL(xa_store_range);
1767 
1768 /**
1769  * xas_get_order() - Get the order of an entry.
1770  * @xas: XArray operation state.
1771  *
1772  * Called after xas_load, the xas should not be in an error state.
1773  *
1774  * Return: A number between 0 and 63 indicating the order of the entry.
1775  */
1776 int xas_get_order(struct xa_state *xas)
1777 {
1778 	int order = 0;
1779 
1780 	if (!xas->xa_node)
1781 		return 0;
1782 
1783 	for (;;) {
1784 		unsigned int slot = xas->xa_offset + (1 << order);
1785 
1786 		if (slot >= XA_CHUNK_SIZE)
1787 			break;
1788 		if (!xa_is_sibling(xa_entry(xas->xa, xas->xa_node, slot)))
1789 			break;
1790 		order++;
1791 	}
1792 
1793 	order += xas->xa_node->shift;
1794 	return order;
1795 }
1796 EXPORT_SYMBOL_GPL(xas_get_order);
1797 
1798 /**
1799  * xa_get_order() - Get the order of an entry.
1800  * @xa: XArray.
1801  * @index: Index of the entry.
1802  *
1803  * Return: A number between 0 and 63 indicating the order of the entry.
1804  */
1805 int xa_get_order(struct xarray *xa, unsigned long index)
1806 {
1807 	XA_STATE(xas, xa, index);
1808 	int order = 0;
1809 	void *entry;
1810 
1811 	rcu_read_lock();
1812 	entry = xas_load(&xas);
1813 	if (entry)
1814 		order = xas_get_order(&xas);
1815 	rcu_read_unlock();
1816 
1817 	return order;
1818 }
1819 EXPORT_SYMBOL(xa_get_order);
1820 #endif /* CONFIG_XARRAY_MULTI */
1821 
1822 /**
1823  * __xa_alloc() - Find somewhere to store this entry in the XArray.
1824  * @xa: XArray.
1825  * @id: Pointer to ID.
1826  * @limit: Range for allocated ID.
1827  * @entry: New entry.
1828  * @gfp: Memory allocation flags.
1829  *
1830  * Finds an empty entry in @xa between @limit.min and @limit.max,
1831  * stores the index into the @id pointer, then stores the entry at
1832  * that index.  A concurrent lookup will not see an uninitialised @id.
1833  *
1834  * Must only be operated on an xarray initialized with flag XA_FLAGS_ALLOC set
1835  * in xa_init_flags().
1836  *
1837  * Context: Any context.  Expects xa_lock to be held on entry.  May
1838  * release and reacquire xa_lock if @gfp flags permit.
1839  * Return: 0 on success, -ENOMEM if memory could not be allocated or
1840  * -EBUSY if there are no free entries in @limit.
1841  */
1842 int __xa_alloc(struct xarray *xa, u32 *id, void *entry,
1843 		struct xa_limit limit, gfp_t gfp)
1844 {
1845 	XA_STATE(xas, xa, 0);
1846 
1847 	if (WARN_ON_ONCE(xa_is_advanced(entry)))
1848 		return -EINVAL;
1849 	if (WARN_ON_ONCE(!xa_track_free(xa)))
1850 		return -EINVAL;
1851 
1852 	if (!entry)
1853 		entry = XA_ZERO_ENTRY;
1854 
1855 	do {
1856 		xas.xa_index = limit.min;
1857 		xas_find_marked(&xas, limit.max, XA_FREE_MARK);
1858 		if (xas.xa_node == XAS_RESTART)
1859 			xas_set_err(&xas, -EBUSY);
1860 		else
1861 			*id = xas.xa_index;
1862 		xas_store(&xas, entry);
1863 		xas_clear_mark(&xas, XA_FREE_MARK);
1864 	} while (__xas_nomem(&xas, gfp));
1865 
1866 	return xas_error(&xas);
1867 }
1868 EXPORT_SYMBOL(__xa_alloc);
1869 
1870 /**
1871  * __xa_alloc_cyclic() - Find somewhere to store this entry in the XArray.
1872  * @xa: XArray.
1873  * @id: Pointer to ID.
1874  * @entry: New entry.
1875  * @limit: Range of allocated ID.
1876  * @next: Pointer to next ID to allocate.
1877  * @gfp: Memory allocation flags.
1878  *
1879  * Finds an empty entry in @xa between @limit.min and @limit.max,
1880  * stores the index into the @id pointer, then stores the entry at
1881  * that index.  A concurrent lookup will not see an uninitialised @id.
1882  * The search for an empty entry will start at @next and will wrap
1883  * around if necessary.
1884  *
1885  * Must only be operated on an xarray initialized with flag XA_FLAGS_ALLOC set
1886  * in xa_init_flags().
1887  *
1888  * Context: Any context.  Expects xa_lock to be held on entry.  May
1889  * release and reacquire xa_lock if @gfp flags permit.
1890  * Return: 0 if the allocation succeeded without wrapping.  1 if the
1891  * allocation succeeded after wrapping, -ENOMEM if memory could not be
1892  * allocated or -EBUSY if there are no free entries in @limit.
1893  */
1894 int __xa_alloc_cyclic(struct xarray *xa, u32 *id, void *entry,
1895 		struct xa_limit limit, u32 *next, gfp_t gfp)
1896 {
1897 	u32 min = limit.min;
1898 	int ret;
1899 
1900 	limit.min = max(min, *next);
1901 	ret = __xa_alloc(xa, id, entry, limit, gfp);
1902 	if ((xa->xa_flags & XA_FLAGS_ALLOC_WRAPPED) && ret == 0) {
1903 		xa->xa_flags &= ~XA_FLAGS_ALLOC_WRAPPED;
1904 		ret = 1;
1905 	}
1906 
1907 	if (ret < 0 && limit.min > min) {
1908 		limit.min = min;
1909 		ret = __xa_alloc(xa, id, entry, limit, gfp);
1910 		if (ret == 0)
1911 			ret = 1;
1912 	}
1913 
1914 	if (ret >= 0) {
1915 		*next = *id + 1;
1916 		if (*next == 0)
1917 			xa->xa_flags |= XA_FLAGS_ALLOC_WRAPPED;
1918 	}
1919 	return ret;
1920 }
1921 EXPORT_SYMBOL(__xa_alloc_cyclic);
1922 
1923 /**
1924  * __xa_set_mark() - Set this mark on this entry while locked.
1925  * @xa: XArray.
1926  * @index: Index of entry.
1927  * @mark: Mark number.
1928  *
1929  * Attempting to set a mark on a %NULL entry does not succeed.
1930  *
1931  * Context: Any context.  Expects xa_lock to be held on entry.
1932  */
1933 void __xa_set_mark(struct xarray *xa, unsigned long index, xa_mark_t mark)
1934 {
1935 	XA_STATE(xas, xa, index);
1936 	void *entry = xas_load(&xas);
1937 
1938 	if (entry)
1939 		xas_set_mark(&xas, mark);
1940 }
1941 EXPORT_SYMBOL(__xa_set_mark);
1942 
1943 /**
1944  * __xa_clear_mark() - Clear this mark on this entry while locked.
1945  * @xa: XArray.
1946  * @index: Index of entry.
1947  * @mark: Mark number.
1948  *
1949  * Context: Any context.  Expects xa_lock to be held on entry.
1950  */
1951 void __xa_clear_mark(struct xarray *xa, unsigned long index, xa_mark_t mark)
1952 {
1953 	XA_STATE(xas, xa, index);
1954 	void *entry = xas_load(&xas);
1955 
1956 	if (entry)
1957 		xas_clear_mark(&xas, mark);
1958 }
1959 EXPORT_SYMBOL(__xa_clear_mark);
1960 
1961 /**
1962  * xa_get_mark() - Inquire whether this mark is set on this entry.
1963  * @xa: XArray.
1964  * @index: Index of entry.
1965  * @mark: Mark number.
1966  *
1967  * This function uses the RCU read lock, so the result may be out of date
1968  * by the time it returns.  If you need the result to be stable, use a lock.
1969  *
1970  * Context: Any context.  Takes and releases the RCU lock.
1971  * Return: True if the entry at @index has this mark set, false if it doesn't.
1972  */
1973 bool xa_get_mark(struct xarray *xa, unsigned long index, xa_mark_t mark)
1974 {
1975 	XA_STATE(xas, xa, index);
1976 	void *entry;
1977 
1978 	rcu_read_lock();
1979 	entry = xas_start(&xas);
1980 	while (xas_get_mark(&xas, mark)) {
1981 		if (!xa_is_node(entry))
1982 			goto found;
1983 		entry = xas_descend(&xas, xa_to_node(entry));
1984 	}
1985 	rcu_read_unlock();
1986 	return false;
1987  found:
1988 	rcu_read_unlock();
1989 	return true;
1990 }
1991 EXPORT_SYMBOL(xa_get_mark);
1992 
1993 /**
1994  * xa_set_mark() - Set this mark on this entry.
1995  * @xa: XArray.
1996  * @index: Index of entry.
1997  * @mark: Mark number.
1998  *
1999  * Attempting to set a mark on a %NULL entry does not succeed.
2000  *
2001  * Context: Process context.  Takes and releases the xa_lock.
2002  */
2003 void xa_set_mark(struct xarray *xa, unsigned long index, xa_mark_t mark)
2004 {
2005 	xa_lock(xa);
2006 	__xa_set_mark(xa, index, mark);
2007 	xa_unlock(xa);
2008 }
2009 EXPORT_SYMBOL(xa_set_mark);
2010 
2011 /**
2012  * xa_clear_mark() - Clear this mark on this entry.
2013  * @xa: XArray.
2014  * @index: Index of entry.
2015  * @mark: Mark number.
2016  *
2017  * Clearing a mark always succeeds.
2018  *
2019  * Context: Process context.  Takes and releases the xa_lock.
2020  */
2021 void xa_clear_mark(struct xarray *xa, unsigned long index, xa_mark_t mark)
2022 {
2023 	xa_lock(xa);
2024 	__xa_clear_mark(xa, index, mark);
2025 	xa_unlock(xa);
2026 }
2027 EXPORT_SYMBOL(xa_clear_mark);
2028 
2029 /**
2030  * xa_find() - Search the XArray for an entry.
2031  * @xa: XArray.
2032  * @indexp: Pointer to an index.
2033  * @max: Maximum index to search to.
2034  * @filter: Selection criterion.
2035  *
2036  * Finds the entry in @xa which matches the @filter, and has the lowest
2037  * index that is at least @indexp and no more than @max.
2038  * If an entry is found, @indexp is updated to be the index of the entry.
2039  * This function is protected by the RCU read lock, so it may not find
2040  * entries which are being simultaneously added.  It will not return an
2041  * %XA_RETRY_ENTRY; if you need to see retry entries, use xas_find().
2042  *
2043  * Context: Any context.  Takes and releases the RCU lock.
2044  * Return: The entry, if found, otherwise %NULL.
2045  */
2046 void *xa_find(struct xarray *xa, unsigned long *indexp,
2047 			unsigned long max, xa_mark_t filter)
2048 {
2049 	XA_STATE(xas, xa, *indexp);
2050 	void *entry;
2051 
2052 	rcu_read_lock();
2053 	do {
2054 		if ((__force unsigned int)filter < XA_MAX_MARKS)
2055 			entry = xas_find_marked(&xas, max, filter);
2056 		else
2057 			entry = xas_find(&xas, max);
2058 	} while (xas_retry(&xas, entry));
2059 	rcu_read_unlock();
2060 
2061 	if (entry)
2062 		*indexp = xas.xa_index;
2063 	return entry;
2064 }
2065 EXPORT_SYMBOL(xa_find);
2066 
2067 static bool xas_sibling(struct xa_state *xas)
2068 {
2069 	struct xa_node *node = xas->xa_node;
2070 	unsigned long mask;
2071 
2072 	if (!IS_ENABLED(CONFIG_XARRAY_MULTI) || !node)
2073 		return false;
2074 	mask = (XA_CHUNK_SIZE << node->shift) - 1;
2075 	return (xas->xa_index & mask) >
2076 		((unsigned long)xas->xa_offset << node->shift);
2077 }
2078 
2079 /**
2080  * xa_find_after() - Search the XArray for a present entry.
2081  * @xa: XArray.
2082  * @indexp: Pointer to an index.
2083  * @max: Maximum index to search to.
2084  * @filter: Selection criterion.
2085  *
2086  * Finds the entry in @xa which matches the @filter and has the lowest
2087  * index that is above @indexp and no more than @max.
2088  * If an entry is found, @indexp is updated to be the index of the entry.
2089  * This function is protected by the RCU read lock, so it may miss entries
2090  * which are being simultaneously added.  It will not return an
2091  * %XA_RETRY_ENTRY; if you need to see retry entries, use xas_find().
2092  *
2093  * Context: Any context.  Takes and releases the RCU lock.
2094  * Return: The pointer, if found, otherwise %NULL.
2095  */
2096 void *xa_find_after(struct xarray *xa, unsigned long *indexp,
2097 			unsigned long max, xa_mark_t filter)
2098 {
2099 	XA_STATE(xas, xa, *indexp + 1);
2100 	void *entry;
2101 
2102 	if (xas.xa_index == 0)
2103 		return NULL;
2104 
2105 	rcu_read_lock();
2106 	for (;;) {
2107 		if ((__force unsigned int)filter < XA_MAX_MARKS)
2108 			entry = xas_find_marked(&xas, max, filter);
2109 		else
2110 			entry = xas_find(&xas, max);
2111 
2112 		if (xas_invalid(&xas))
2113 			break;
2114 		if (xas_sibling(&xas))
2115 			continue;
2116 		if (!xas_retry(&xas, entry))
2117 			break;
2118 	}
2119 	rcu_read_unlock();
2120 
2121 	if (entry)
2122 		*indexp = xas.xa_index;
2123 	return entry;
2124 }
2125 EXPORT_SYMBOL(xa_find_after);
2126 
2127 static unsigned int xas_extract_present(struct xa_state *xas, void **dst,
2128 			unsigned long max, unsigned int n)
2129 {
2130 	void *entry;
2131 	unsigned int i = 0;
2132 
2133 	rcu_read_lock();
2134 	xas_for_each(xas, entry, max) {
2135 		if (xas_retry(xas, entry))
2136 			continue;
2137 		dst[i++] = entry;
2138 		if (i == n)
2139 			break;
2140 	}
2141 	rcu_read_unlock();
2142 
2143 	return i;
2144 }
2145 
2146 static unsigned int xas_extract_marked(struct xa_state *xas, void **dst,
2147 			unsigned long max, unsigned int n, xa_mark_t mark)
2148 {
2149 	void *entry;
2150 	unsigned int i = 0;
2151 
2152 	rcu_read_lock();
2153 	xas_for_each_marked(xas, entry, max, mark) {
2154 		if (xas_retry(xas, entry))
2155 			continue;
2156 		dst[i++] = entry;
2157 		if (i == n)
2158 			break;
2159 	}
2160 	rcu_read_unlock();
2161 
2162 	return i;
2163 }
2164 
2165 /**
2166  * xa_extract() - Copy selected entries from the XArray into a normal array.
2167  * @xa: The source XArray to copy from.
2168  * @dst: The buffer to copy entries into.
2169  * @start: The first index in the XArray eligible to be selected.
2170  * @max: The last index in the XArray eligible to be selected.
2171  * @n: The maximum number of entries to copy.
2172  * @filter: Selection criterion.
2173  *
2174  * Copies up to @n entries that match @filter from the XArray.  The
2175  * copied entries will have indices between @start and @max, inclusive.
2176  *
2177  * The @filter may be an XArray mark value, in which case entries which are
2178  * marked with that mark will be copied.  It may also be %XA_PRESENT, in
2179  * which case all entries which are not %NULL will be copied.
2180  *
2181  * The entries returned may not represent a snapshot of the XArray at a
2182  * moment in time.  For example, if another thread stores to index 5, then
2183  * index 10, calling xa_extract() may return the old contents of index 5
2184  * and the new contents of index 10.  Indices not modified while this
2185  * function is running will not be skipped.
2186  *
2187  * If you need stronger guarantees, holding the xa_lock across calls to this
2188  * function will prevent concurrent modification.
2189  *
2190  * Context: Any context.  Takes and releases the RCU lock.
2191  * Return: The number of entries copied.
2192  */
2193 unsigned int xa_extract(struct xarray *xa, void **dst, unsigned long start,
2194 			unsigned long max, unsigned int n, xa_mark_t filter)
2195 {
2196 	XA_STATE(xas, xa, start);
2197 
2198 	if (!n)
2199 		return 0;
2200 
2201 	if ((__force unsigned int)filter < XA_MAX_MARKS)
2202 		return xas_extract_marked(&xas, dst, max, n, filter);
2203 	return xas_extract_present(&xas, dst, max, n);
2204 }
2205 EXPORT_SYMBOL(xa_extract);
2206 
2207 /**
2208  * xa_delete_node() - Private interface for workingset code.
2209  * @node: Node to be removed from the tree.
2210  * @update: Function to call to update ancestor nodes.
2211  *
2212  * Context: xa_lock must be held on entry and will not be released.
2213  */
2214 void xa_delete_node(struct xa_node *node, xa_update_node_t update)
2215 {
2216 	struct xa_state xas = {
2217 		.xa = node->array,
2218 		.xa_index = (unsigned long)node->offset <<
2219 				(node->shift + XA_CHUNK_SHIFT),
2220 		.xa_shift = node->shift + XA_CHUNK_SHIFT,
2221 		.xa_offset = node->offset,
2222 		.xa_node = xa_parent_locked(node->array, node),
2223 		.xa_update = update,
2224 	};
2225 
2226 	xas_store(&xas, NULL);
2227 }
2228 EXPORT_SYMBOL_GPL(xa_delete_node);	/* For the benefit of the test suite */
2229 
2230 /**
2231  * xa_destroy() - Free all internal data structures.
2232  * @xa: XArray.
2233  *
2234  * After calling this function, the XArray is empty and has freed all memory
2235  * allocated for its internal data structures.  You are responsible for
2236  * freeing the objects referenced by the XArray.
2237  *
2238  * Context: Any context.  Takes and releases the xa_lock, interrupt-safe.
2239  */
2240 void xa_destroy(struct xarray *xa)
2241 {
2242 	XA_STATE(xas, xa, 0);
2243 	unsigned long flags;
2244 	void *entry;
2245 
2246 	xas.xa_node = NULL;
2247 	xas_lock_irqsave(&xas, flags);
2248 	entry = xa_head_locked(xa);
2249 	RCU_INIT_POINTER(xa->xa_head, NULL);
2250 	xas_init_marks(&xas);
2251 	if (xa_zero_busy(xa))
2252 		xa_mark_clear(xa, XA_FREE_MARK);
2253 	/* lockdep checks we're still holding the lock in xas_free_nodes() */
2254 	if (xa_is_node(entry))
2255 		xas_free_nodes(&xas, xa_to_node(entry));
2256 	xas_unlock_irqrestore(&xas, flags);
2257 }
2258 EXPORT_SYMBOL(xa_destroy);
2259 
2260 #ifdef XA_DEBUG
2261 void xa_dump_node(const struct xa_node *node)
2262 {
2263 	unsigned i, j;
2264 
2265 	if (!node)
2266 		return;
2267 	if ((unsigned long)node & 3) {
2268 		pr_cont("node %px\n", node);
2269 		return;
2270 	}
2271 
2272 	pr_cont("node %px %s %d parent %px shift %d count %d values %d "
2273 		"array %px list %px %px marks",
2274 		node, node->parent ? "offset" : "max", node->offset,
2275 		node->parent, node->shift, node->count, node->nr_values,
2276 		node->array, node->private_list.prev, node->private_list.next);
2277 	for (i = 0; i < XA_MAX_MARKS; i++)
2278 		for (j = 0; j < XA_MARK_LONGS; j++)
2279 			pr_cont(" %lx", node->marks[i][j]);
2280 	pr_cont("\n");
2281 }
2282 
2283 void xa_dump_index(unsigned long index, unsigned int shift)
2284 {
2285 	if (!shift)
2286 		pr_info("%lu: ", index);
2287 	else if (shift >= BITS_PER_LONG)
2288 		pr_info("0-%lu: ", ~0UL);
2289 	else
2290 		pr_info("%lu-%lu: ", index, index | ((1UL << shift) - 1));
2291 }
2292 
2293 void xa_dump_entry(const void *entry, unsigned long index, unsigned long shift)
2294 {
2295 	if (!entry)
2296 		return;
2297 
2298 	xa_dump_index(index, shift);
2299 
2300 	if (xa_is_node(entry)) {
2301 		if (shift == 0) {
2302 			pr_cont("%px\n", entry);
2303 		} else {
2304 			unsigned long i;
2305 			struct xa_node *node = xa_to_node(entry);
2306 			xa_dump_node(node);
2307 			for (i = 0; i < XA_CHUNK_SIZE; i++)
2308 				xa_dump_entry(node->slots[i],
2309 				      index + (i << node->shift), node->shift);
2310 		}
2311 	} else if (xa_is_value(entry))
2312 		pr_cont("value %ld (0x%lx) [%px]\n", xa_to_value(entry),
2313 						xa_to_value(entry), entry);
2314 	else if (!xa_is_internal(entry))
2315 		pr_cont("%px\n", entry);
2316 	else if (xa_is_retry(entry))
2317 		pr_cont("retry (%ld)\n", xa_to_internal(entry));
2318 	else if (xa_is_sibling(entry))
2319 		pr_cont("sibling (slot %ld)\n", xa_to_sibling(entry));
2320 	else if (xa_is_zero(entry))
2321 		pr_cont("zero (%ld)\n", xa_to_internal(entry));
2322 	else
2323 		pr_cont("UNKNOWN ENTRY (%px)\n", entry);
2324 }
2325 
2326 void xa_dump(const struct xarray *xa)
2327 {
2328 	void *entry = xa->xa_head;
2329 	unsigned int shift = 0;
2330 
2331 	pr_info("xarray: %px head %px flags %x marks %d %d %d\n", xa, entry,
2332 			xa->xa_flags, xa_marked(xa, XA_MARK_0),
2333 			xa_marked(xa, XA_MARK_1), xa_marked(xa, XA_MARK_2));
2334 	if (xa_is_node(entry))
2335 		shift = xa_to_node(entry)->shift + XA_CHUNK_SHIFT;
2336 	xa_dump_entry(entry, 0, shift);
2337 }
2338 #endif
2339