xref: /openbmc/linux/lib/test_maple_tree.c (revision 759426c7)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * test_maple_tree.c: Test the maple tree API
4  * Copyright (c) 2018-2022 Oracle Corporation
5  * Author: Liam R. Howlett <Liam.Howlett@Oracle.com>
6  *
7  * Any tests that only require the interface of the tree.
8  */
9 
10 #include <linux/maple_tree.h>
11 #include <linux/module.h>
12 
13 #define MTREE_ALLOC_MAX 0x2000000000000Ul
14 #define CONFIG_MAPLE_SEARCH
15 #define MAPLE_32BIT (MAPLE_NODE_SLOTS > 31)
16 
17 #ifndef CONFIG_DEBUG_MAPLE_TREE
18 #define mt_dump(mt, fmt)		do {} while (0)
19 #define mt_validate(mt)			do {} while (0)
20 #define mt_cache_shrink()		do {} while (0)
21 #define mas_dump(mas)			do {} while (0)
22 #define mas_wr_dump(mas)		do {} while (0)
23 atomic_t maple_tree_tests_run;
24 atomic_t maple_tree_tests_passed;
25 #undef MT_BUG_ON
26 
27 #define MT_BUG_ON(__tree, __x) do {					\
28 	atomic_inc(&maple_tree_tests_run);				\
29 	if (__x) {							\
30 		pr_info("BUG at %s:%d (%u)\n",				\
31 		__func__, __LINE__, __x);				\
32 		pr_info("Pass: %u Run:%u\n",				\
33 			atomic_read(&maple_tree_tests_passed),		\
34 			atomic_read(&maple_tree_tests_run));		\
35 	} else {							\
36 		atomic_inc(&maple_tree_tests_passed);			\
37 	}								\
38 } while (0)
39 #endif
40 
41 /* #define BENCH_SLOT_STORE */
42 /* #define BENCH_NODE_STORE */
43 /* #define BENCH_AWALK */
44 /* #define BENCH_WALK */
45 /* #define BENCH_MT_FOR_EACH */
46 /* #define BENCH_FORK */
47 /* #define BENCH_MAS_FOR_EACH */
48 /* #define BENCH_MAS_PREV */
49 
50 #ifdef __KERNEL__
51 #define mt_set_non_kernel(x)		do {} while (0)
52 #define mt_zero_nr_tallocated(x)	do {} while (0)
53 #else
54 #define cond_resched()			do {} while (0)
55 #endif
56 static int __init mtree_insert_index(struct maple_tree *mt,
57 				     unsigned long index, gfp_t gfp)
58 {
59 	return mtree_insert(mt, index, xa_mk_value(index & LONG_MAX), gfp);
60 }
61 
62 static void __init mtree_erase_index(struct maple_tree *mt, unsigned long index)
63 {
64 	MT_BUG_ON(mt, mtree_erase(mt, index) != xa_mk_value(index & LONG_MAX));
65 	MT_BUG_ON(mt, mtree_load(mt, index) != NULL);
66 }
67 
68 static int __init mtree_test_insert(struct maple_tree *mt, unsigned long index,
69 				void *ptr)
70 {
71 	return mtree_insert(mt, index, ptr, GFP_KERNEL);
72 }
73 
74 static int __init mtree_test_store_range(struct maple_tree *mt,
75 			unsigned long start, unsigned long end, void *ptr)
76 {
77 	return mtree_store_range(mt, start, end, ptr, GFP_KERNEL);
78 }
79 
80 static int __init mtree_test_store(struct maple_tree *mt, unsigned long start,
81 				void *ptr)
82 {
83 	return mtree_test_store_range(mt, start, start, ptr);
84 }
85 
86 static int __init mtree_test_insert_range(struct maple_tree *mt,
87 			unsigned long start, unsigned long end, void *ptr)
88 {
89 	return mtree_insert_range(mt, start, end, ptr, GFP_KERNEL);
90 }
91 
92 static void __init *mtree_test_load(struct maple_tree *mt, unsigned long index)
93 {
94 	return mtree_load(mt, index);
95 }
96 
97 static void __init *mtree_test_erase(struct maple_tree *mt, unsigned long index)
98 {
99 	return mtree_erase(mt, index);
100 }
101 
102 #if defined(CONFIG_64BIT)
103 static noinline void __init check_mtree_alloc_range(struct maple_tree *mt,
104 		unsigned long start, unsigned long end, unsigned long size,
105 		unsigned long expected, int eret, void *ptr)
106 {
107 
108 	unsigned long result = expected + 1;
109 	int ret;
110 
111 	ret = mtree_alloc_range(mt, &result, ptr, size, start, end,
112 			GFP_KERNEL);
113 	MT_BUG_ON(mt, ret != eret);
114 	if (ret)
115 		return;
116 
117 	MT_BUG_ON(mt, result != expected);
118 }
119 
120 static noinline void __init check_mtree_alloc_rrange(struct maple_tree *mt,
121 		unsigned long start, unsigned long end, unsigned long size,
122 		unsigned long expected, int eret, void *ptr)
123 {
124 
125 	unsigned long result = expected + 1;
126 	int ret;
127 
128 	ret = mtree_alloc_rrange(mt, &result, ptr, size, start, end,
129 			GFP_KERNEL);
130 	MT_BUG_ON(mt, ret != eret);
131 	if (ret)
132 		return;
133 
134 	MT_BUG_ON(mt, result != expected);
135 }
136 #endif
137 
138 static noinline void __init check_load(struct maple_tree *mt,
139 				       unsigned long index, void *ptr)
140 {
141 	void *ret = mtree_test_load(mt, index);
142 
143 	if (ret != ptr)
144 		pr_err("Load %lu returned %p expect %p\n", index, ret, ptr);
145 	MT_BUG_ON(mt, ret != ptr);
146 }
147 
148 static noinline void __init check_store_range(struct maple_tree *mt,
149 		unsigned long start, unsigned long end, void *ptr, int expected)
150 {
151 	int ret = -EINVAL;
152 	unsigned long i;
153 
154 	ret = mtree_test_store_range(mt, start, end, ptr);
155 	MT_BUG_ON(mt, ret != expected);
156 
157 	if (ret)
158 		return;
159 
160 	for (i = start; i <= end; i++)
161 		check_load(mt, i, ptr);
162 }
163 
164 static noinline void __init check_insert_range(struct maple_tree *mt,
165 		unsigned long start, unsigned long end, void *ptr, int expected)
166 {
167 	int ret = -EINVAL;
168 	unsigned long i;
169 
170 	ret = mtree_test_insert_range(mt, start, end, ptr);
171 	MT_BUG_ON(mt, ret != expected);
172 
173 	if (ret)
174 		return;
175 
176 	for (i = start; i <= end; i++)
177 		check_load(mt, i, ptr);
178 }
179 
180 static noinline void __init check_insert(struct maple_tree *mt,
181 					 unsigned long index, void *ptr)
182 {
183 	int ret = -EINVAL;
184 
185 	ret = mtree_test_insert(mt, index, ptr);
186 	MT_BUG_ON(mt, ret != 0);
187 }
188 
189 static noinline void __init check_dup_insert(struct maple_tree *mt,
190 				      unsigned long index, void *ptr)
191 {
192 	int ret = -EINVAL;
193 
194 	ret = mtree_test_insert(mt, index, ptr);
195 	MT_BUG_ON(mt, ret != -EEXIST);
196 }
197 
198 
199 static noinline void __init check_index_load(struct maple_tree *mt,
200 					     unsigned long index)
201 {
202 	return check_load(mt, index, xa_mk_value(index & LONG_MAX));
203 }
204 
205 static inline __init int not_empty(struct maple_node *node)
206 {
207 	int i;
208 
209 	if (node->parent)
210 		return 1;
211 
212 	for (i = 0; i < ARRAY_SIZE(node->slot); i++)
213 		if (node->slot[i])
214 			return 1;
215 
216 	return 0;
217 }
218 
219 
220 static noinline void __init check_rev_seq(struct maple_tree *mt,
221 					  unsigned long max, bool verbose)
222 {
223 	unsigned long i = max, j;
224 
225 	MT_BUG_ON(mt, !mtree_empty(mt));
226 
227 	mt_zero_nr_tallocated();
228 	while (i) {
229 		MT_BUG_ON(mt, mtree_insert_index(mt, i, GFP_KERNEL));
230 		for (j = i; j <= max; j++)
231 			check_index_load(mt, j);
232 
233 		check_load(mt, i - 1, NULL);
234 		mt_set_in_rcu(mt);
235 		MT_BUG_ON(mt, !mt_height(mt));
236 		mt_clear_in_rcu(mt);
237 		MT_BUG_ON(mt, !mt_height(mt));
238 		i--;
239 	}
240 	check_load(mt, max + 1, NULL);
241 
242 #ifndef __KERNEL__
243 	if (verbose) {
244 		rcu_barrier();
245 		mt_dump(mt, mt_dump_dec);
246 		pr_info(" %s test of 0-%lu %luK in %d active (%d total)\n",
247 			__func__, max, mt_get_alloc_size()/1024, mt_nr_allocated(),
248 			mt_nr_tallocated());
249 	}
250 #endif
251 }
252 
253 static noinline void __init check_seq(struct maple_tree *mt, unsigned long max,
254 		bool verbose)
255 {
256 	unsigned long i, j;
257 
258 	MT_BUG_ON(mt, !mtree_empty(mt));
259 
260 	mt_zero_nr_tallocated();
261 	for (i = 0; i <= max; i++) {
262 		MT_BUG_ON(mt, mtree_insert_index(mt, i, GFP_KERNEL));
263 		for (j = 0; j <= i; j++)
264 			check_index_load(mt, j);
265 
266 		if (i)
267 			MT_BUG_ON(mt, !mt_height(mt));
268 		check_load(mt, i + 1, NULL);
269 	}
270 
271 #ifndef __KERNEL__
272 	if (verbose) {
273 		rcu_barrier();
274 		mt_dump(mt, mt_dump_dec);
275 		pr_info(" seq test of 0-%lu %luK in %d active (%d total)\n",
276 			max, mt_get_alloc_size()/1024, mt_nr_allocated(),
277 			mt_nr_tallocated());
278 	}
279 #endif
280 }
281 
282 static noinline void __init check_lb_not_empty(struct maple_tree *mt)
283 {
284 	unsigned long i, j;
285 	unsigned long huge = 4000UL * 1000 * 1000;
286 
287 
288 	i = huge;
289 	while (i > 4096) {
290 		check_insert(mt, i, (void *) i);
291 		for (j = huge; j >= i; j /= 2) {
292 			check_load(mt, j-1, NULL);
293 			check_load(mt, j, (void *) j);
294 			check_load(mt, j+1, NULL);
295 		}
296 		i /= 2;
297 	}
298 	mtree_destroy(mt);
299 }
300 
301 static noinline void __init check_lower_bound_split(struct maple_tree *mt)
302 {
303 	MT_BUG_ON(mt, !mtree_empty(mt));
304 	check_lb_not_empty(mt);
305 }
306 
307 static noinline void __init check_upper_bound_split(struct maple_tree *mt)
308 {
309 	unsigned long i, j;
310 	unsigned long huge;
311 
312 	MT_BUG_ON(mt, !mtree_empty(mt));
313 
314 	if (MAPLE_32BIT)
315 		huge = 2147483647UL;
316 	else
317 		huge = 4000UL * 1000 * 1000;
318 
319 	i = 4096;
320 	while (i < huge) {
321 		check_insert(mt, i, (void *) i);
322 		for (j = i; j >= huge; j *= 2) {
323 			check_load(mt, j-1, NULL);
324 			check_load(mt, j, (void *) j);
325 			check_load(mt, j+1, NULL);
326 		}
327 		i *= 2;
328 	}
329 	mtree_destroy(mt);
330 }
331 
332 static noinline void __init check_mid_split(struct maple_tree *mt)
333 {
334 	unsigned long huge = 8000UL * 1000 * 1000;
335 
336 	check_insert(mt, huge, (void *) huge);
337 	check_insert(mt, 0, xa_mk_value(0));
338 	check_lb_not_empty(mt);
339 }
340 
341 static noinline void __init check_rev_find(struct maple_tree *mt)
342 {
343 	int i, nr_entries = 200;
344 	void *val;
345 	MA_STATE(mas, mt, 0, 0);
346 
347 	for (i = 0; i <= nr_entries; i++)
348 		mtree_store_range(mt, i*10, i*10 + 5,
349 				  xa_mk_value(i), GFP_KERNEL);
350 
351 	rcu_read_lock();
352 	mas_set(&mas, 1000);
353 	val = mas_find_rev(&mas, 1000);
354 	MT_BUG_ON(mt, val != xa_mk_value(100));
355 	val = mas_find_rev(&mas, 1000);
356 	MT_BUG_ON(mt, val != NULL);
357 
358 	mas_set(&mas, 999);
359 	val = mas_find_rev(&mas, 997);
360 	MT_BUG_ON(mt, val != NULL);
361 
362 	mas_set(&mas, 1000);
363 	val = mas_find_rev(&mas, 900);
364 	MT_BUG_ON(mt, val != xa_mk_value(100));
365 	val = mas_find_rev(&mas, 900);
366 	MT_BUG_ON(mt, val != xa_mk_value(99));
367 
368 	mas_set(&mas, 20);
369 	val = mas_find_rev(&mas, 0);
370 	MT_BUG_ON(mt, val != xa_mk_value(2));
371 	val = mas_find_rev(&mas, 0);
372 	MT_BUG_ON(mt, val != xa_mk_value(1));
373 	val = mas_find_rev(&mas, 0);
374 	MT_BUG_ON(mt, val != xa_mk_value(0));
375 	val = mas_find_rev(&mas, 0);
376 	MT_BUG_ON(mt, val != NULL);
377 	rcu_read_unlock();
378 }
379 
380 static noinline void __init check_find(struct maple_tree *mt)
381 {
382 	unsigned long val = 0;
383 	unsigned long count;
384 	unsigned long max;
385 	unsigned long top;
386 	unsigned long last = 0, index = 0;
387 	void *entry, *entry2;
388 
389 	MA_STATE(mas, mt, 0, 0);
390 
391 	/* Insert 0. */
392 	MT_BUG_ON(mt, mtree_insert_index(mt, val++, GFP_KERNEL));
393 
394 #if defined(CONFIG_64BIT)
395 	top = 4398046511104UL;
396 #else
397 	top = ULONG_MAX;
398 #endif
399 
400 	if (MAPLE_32BIT) {
401 		count = 15;
402 	} else {
403 		count = 20;
404 	}
405 
406 	for (int i = 0; i <= count; i++) {
407 		if (val != 64)
408 			MT_BUG_ON(mt, mtree_insert_index(mt, val, GFP_KERNEL));
409 		else
410 			MT_BUG_ON(mt, mtree_insert(mt, val,
411 				XA_ZERO_ENTRY, GFP_KERNEL));
412 
413 		val <<= 2;
414 	}
415 
416 	val = 0;
417 	mas_set(&mas, val);
418 	mas_lock(&mas);
419 	while ((entry = mas_find(&mas, 268435456)) != NULL) {
420 		if (val != 64)
421 			MT_BUG_ON(mt, xa_mk_value(val) != entry);
422 		else
423 			MT_BUG_ON(mt, entry != XA_ZERO_ENTRY);
424 
425 		val <<= 2;
426 		/* For zero check. */
427 		if (!val)
428 			val = 1;
429 	}
430 	mas_unlock(&mas);
431 
432 	val = 0;
433 	mas_set(&mas, val);
434 	mas_lock(&mas);
435 	mas_for_each(&mas, entry, ULONG_MAX) {
436 		if (val != 64)
437 			MT_BUG_ON(mt, xa_mk_value(val) != entry);
438 		else
439 			MT_BUG_ON(mt, entry != XA_ZERO_ENTRY);
440 		val <<= 2;
441 		/* For zero check. */
442 		if (!val)
443 			val = 1;
444 	}
445 	mas_unlock(&mas);
446 
447 	/* Test mas_pause */
448 	val = 0;
449 	mas_set(&mas, val);
450 	mas_lock(&mas);
451 	mas_for_each(&mas, entry, ULONG_MAX) {
452 		if (val != 64)
453 			MT_BUG_ON(mt, xa_mk_value(val) != entry);
454 		else
455 			MT_BUG_ON(mt, entry != XA_ZERO_ENTRY);
456 		val <<= 2;
457 		/* For zero check. */
458 		if (!val)
459 			val = 1;
460 
461 		mas_pause(&mas);
462 		mas_unlock(&mas);
463 		mas_lock(&mas);
464 	}
465 	mas_unlock(&mas);
466 
467 	val = 0;
468 	max = 300; /* A value big enough to include XA_ZERO_ENTRY at 64. */
469 	mt_for_each(mt, entry, index, max) {
470 		MT_BUG_ON(mt, xa_mk_value(val) != entry);
471 		val <<= 2;
472 		if (val == 64) /* Skip zero entry. */
473 			val <<= 2;
474 		/* For zero check. */
475 		if (!val)
476 			val = 1;
477 	}
478 
479 	val = 0;
480 	max = 0;
481 	index = 0;
482 	MT_BUG_ON(mt, mtree_insert_index(mt, ULONG_MAX, GFP_KERNEL));
483 	mt_for_each(mt, entry, index, ULONG_MAX) {
484 		if (val == top)
485 			MT_BUG_ON(mt, entry != xa_mk_value(LONG_MAX));
486 		else
487 			MT_BUG_ON(mt, xa_mk_value(val) != entry);
488 
489 		/* Workaround for 32bit */
490 		if ((val << 2) < val)
491 			val = ULONG_MAX;
492 		else
493 			val <<= 2;
494 
495 		if (val == 64) /* Skip zero entry. */
496 			val <<= 2;
497 		/* For zero check. */
498 		if (!val)
499 			val = 1;
500 		max++;
501 		MT_BUG_ON(mt, max > 25);
502 	}
503 	mtree_erase_index(mt, ULONG_MAX);
504 
505 	mas_reset(&mas);
506 	index = 17;
507 	entry = mt_find(mt, &index, 512);
508 	MT_BUG_ON(mt, xa_mk_value(256) != entry);
509 
510 	mas_reset(&mas);
511 	index = 17;
512 	entry = mt_find(mt, &index, 20);
513 	MT_BUG_ON(mt, entry != NULL);
514 
515 
516 	/* Range check.. */
517 	/* Insert ULONG_MAX */
518 	MT_BUG_ON(mt, mtree_insert_index(mt, ULONG_MAX, GFP_KERNEL));
519 
520 	val = 0;
521 	mas_set(&mas, 0);
522 	mas_lock(&mas);
523 	mas_for_each(&mas, entry, ULONG_MAX) {
524 		if (val == 64)
525 			MT_BUG_ON(mt, entry != XA_ZERO_ENTRY);
526 		else if (val == top)
527 			MT_BUG_ON(mt, entry != xa_mk_value(LONG_MAX));
528 		else
529 			MT_BUG_ON(mt, xa_mk_value(val) != entry);
530 
531 		/* Workaround for 32bit */
532 		if ((val << 2) < val)
533 			val = ULONG_MAX;
534 		else
535 			val <<= 2;
536 
537 		/* For zero check. */
538 		if (!val)
539 			val = 1;
540 		mas_pause(&mas);
541 		mas_unlock(&mas);
542 		mas_lock(&mas);
543 	}
544 	mas_unlock(&mas);
545 
546 	mas_set(&mas, 1048576);
547 	mas_lock(&mas);
548 	entry = mas_find(&mas, 1048576);
549 	mas_unlock(&mas);
550 	MT_BUG_ON(mas.tree, entry == NULL);
551 
552 	/*
553 	 * Find last value.
554 	 * 1. get the expected value, leveraging the existence of an end entry
555 	 * 2. delete end entry
556 	 * 3. find the last value but searching for ULONG_MAX and then using
557 	 * prev
558 	 */
559 	/* First, get the expected result. */
560 	mas_lock(&mas);
561 	mas_reset(&mas);
562 	mas.index = ULONG_MAX; /* start at max.. */
563 	entry = mas_find(&mas, ULONG_MAX);
564 	entry = mas_prev(&mas, 0);
565 	index = mas.index;
566 	last = mas.last;
567 
568 	/* Erase the last entry. */
569 	mas_reset(&mas);
570 	mas.index = ULONG_MAX;
571 	mas.last = ULONG_MAX;
572 	mas_erase(&mas);
573 
574 	/* Get the previous value from MAS_START */
575 	mas_reset(&mas);
576 	entry2 = mas_prev(&mas, 0);
577 
578 	/* Check results. */
579 	MT_BUG_ON(mt, entry != entry2);
580 	MT_BUG_ON(mt, index != mas.index);
581 	MT_BUG_ON(mt, last != mas.last);
582 
583 
584 	mas.node = MAS_NONE;
585 	mas.index = ULONG_MAX;
586 	mas.last = ULONG_MAX;
587 	entry2 = mas_prev(&mas, 0);
588 	MT_BUG_ON(mt, entry != entry2);
589 
590 	mas_set(&mas, 0);
591 	MT_BUG_ON(mt, mas_prev(&mas, 0) != NULL);
592 
593 	mas_unlock(&mas);
594 	mtree_destroy(mt);
595 }
596 
597 static noinline void __init check_find_2(struct maple_tree *mt)
598 {
599 	unsigned long i, j;
600 	void *entry;
601 
602 	MA_STATE(mas, mt, 0, 0);
603 	rcu_read_lock();
604 	mas_for_each(&mas, entry, ULONG_MAX)
605 		MT_BUG_ON(mt, true);
606 	rcu_read_unlock();
607 
608 	for (i = 0; i < 256; i++) {
609 		mtree_insert_index(mt, i, GFP_KERNEL);
610 		j = 0;
611 		mas_set(&mas, 0);
612 		rcu_read_lock();
613 		mas_for_each(&mas, entry, ULONG_MAX) {
614 			MT_BUG_ON(mt, entry != xa_mk_value(j));
615 			j++;
616 		}
617 		rcu_read_unlock();
618 		MT_BUG_ON(mt, j != i + 1);
619 	}
620 
621 	for (i = 0; i < 256; i++) {
622 		mtree_erase_index(mt, i);
623 		j = i + 1;
624 		mas_set(&mas, 0);
625 		rcu_read_lock();
626 		mas_for_each(&mas, entry, ULONG_MAX) {
627 			if (xa_is_zero(entry))
628 				continue;
629 
630 			MT_BUG_ON(mt, entry != xa_mk_value(j));
631 			j++;
632 		}
633 		rcu_read_unlock();
634 		MT_BUG_ON(mt, j != 256);
635 	}
636 
637 	/*MT_BUG_ON(mt, !mtree_empty(mt)); */
638 }
639 
640 
641 #if defined(CONFIG_64BIT)
642 static noinline void __init check_alloc_rev_range(struct maple_tree *mt)
643 {
644 	/*
645 	 * Generated by:
646 	 * cat /proc/self/maps | awk '{print $1}'|
647 	 * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}'
648 	 */
649 
650 	static const unsigned long range[] = {
651 	/*      Inclusive     , Exclusive. */
652 		0x565234af2000, 0x565234af4000,
653 		0x565234af4000, 0x565234af9000,
654 		0x565234af9000, 0x565234afb000,
655 		0x565234afc000, 0x565234afd000,
656 		0x565234afd000, 0x565234afe000,
657 		0x565235def000, 0x565235e10000,
658 		0x7f36d4bfd000, 0x7f36d4ee2000,
659 		0x7f36d4ee2000, 0x7f36d4f04000,
660 		0x7f36d4f04000, 0x7f36d504c000,
661 		0x7f36d504c000, 0x7f36d5098000,
662 		0x7f36d5098000, 0x7f36d5099000,
663 		0x7f36d5099000, 0x7f36d509d000,
664 		0x7f36d509d000, 0x7f36d509f000,
665 		0x7f36d509f000, 0x7f36d50a5000,
666 		0x7f36d50b9000, 0x7f36d50db000,
667 		0x7f36d50db000, 0x7f36d50dc000,
668 		0x7f36d50dc000, 0x7f36d50fa000,
669 		0x7f36d50fa000, 0x7f36d5102000,
670 		0x7f36d5102000, 0x7f36d5103000,
671 		0x7f36d5103000, 0x7f36d5104000,
672 		0x7f36d5104000, 0x7f36d5105000,
673 		0x7fff5876b000, 0x7fff5878d000,
674 		0x7fff5878e000, 0x7fff58791000,
675 		0x7fff58791000, 0x7fff58793000,
676 	};
677 
678 	static const unsigned long holes[] = {
679 		/*
680 		 * Note: start of hole is INCLUSIVE
681 		 *        end of hole is EXCLUSIVE
682 		 *        (opposite of the above table.)
683 		 * Start of hole, end of hole,  size of hole (+1)
684 		 */
685 		0x565234afb000, 0x565234afc000, 0x1000,
686 		0x565234afe000, 0x565235def000, 0x12F1000,
687 		0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000,
688 	};
689 
690 	/*
691 	 * req_range consists of 4 values.
692 	 * 1. min index
693 	 * 2. max index
694 	 * 3. size
695 	 * 4. number that should be returned.
696 	 * 5. return value
697 	 */
698 	static const unsigned long req_range[] = {
699 		0x565234af9000, /* Min */
700 		0x7fff58791000, /* Max */
701 		0x1000,         /* Size */
702 		0x7fff5878d << 12,  /* First rev hole of size 0x1000 */
703 		0,              /* Return value success. */
704 
705 		0x0,            /* Min */
706 		0x565234AF0 << 12,    /* Max */
707 		0x3000,         /* Size */
708 		0x565234AEE << 12,  /* max - 3. */
709 		0,              /* Return value success. */
710 
711 		0x0,            /* Min */
712 		-1,             /* Max */
713 		0x1000,         /* Size */
714 		562949953421311 << 12,/* First rev hole of size 0x1000 */
715 		0,              /* Return value success. */
716 
717 		0x0,            /* Min */
718 		0x7F36D5109 << 12,    /* Max */
719 		0x4000,         /* Size */
720 		0x7F36D5106 << 12,    /* First rev hole of size 0x4000 */
721 		0,              /* Return value success. */
722 
723 		/* Ascend test. */
724 		0x0,
725 		34148798628 << 12,
726 		19 << 12,
727 		34148797418 << 12,
728 		0x0,
729 
730 		/* Too big test. */
731 		0x0,
732 		18446744073709551615UL,
733 		562915594369134UL << 12,
734 		0x0,
735 		-EBUSY,
736 
737 		/* Single space test. */
738 		34148798725 << 12,
739 		34148798725 << 12,
740 		1 << 12,
741 		34148798725 << 12,
742 		0,
743 	};
744 
745 	int i, range_count = ARRAY_SIZE(range);
746 	int req_range_count = ARRAY_SIZE(req_range);
747 	unsigned long min = 0;
748 
749 	MA_STATE(mas, mt, 0, 0);
750 
751 	mtree_store_range(mt, MTREE_ALLOC_MAX, ULONG_MAX, XA_ZERO_ENTRY,
752 			  GFP_KERNEL);
753 #define DEBUG_REV_RANGE 0
754 	for (i = 0; i < range_count; i += 2) {
755 		/* Inclusive, Inclusive (with the -1) */
756 
757 #if DEBUG_REV_RANGE
758 		pr_debug("\t%s: Insert %lu-%lu\n", __func__, range[i] >> 12,
759 				(range[i + 1] >> 12) - 1);
760 #endif
761 		check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1,
762 				xa_mk_value(range[i] >> 12), 0);
763 		mt_validate(mt);
764 	}
765 
766 
767 	mas_lock(&mas);
768 	for (i = 0; i < ARRAY_SIZE(holes); i += 3) {
769 #if DEBUG_REV_RANGE
770 		pr_debug("Search from %lu-%lu for gap %lu should be at %lu\n",
771 				min, holes[i+1]>>12, holes[i+2]>>12,
772 				holes[i] >> 12);
773 #endif
774 		MT_BUG_ON(mt, mas_empty_area_rev(&mas, min,
775 					holes[i+1] >> 12,
776 					holes[i+2] >> 12));
777 #if DEBUG_REV_RANGE
778 		pr_debug("Found %lu %lu\n", mas.index, mas.last);
779 		pr_debug("gap %lu %lu\n", (holes[i] >> 12),
780 				(holes[i+1] >> 12));
781 #endif
782 		MT_BUG_ON(mt, mas.last + 1 != (holes[i+1] >> 12));
783 		MT_BUG_ON(mt, mas.index != (holes[i+1] >> 12) - (holes[i+2] >> 12));
784 		min = holes[i+1] >> 12;
785 		mas_reset(&mas);
786 	}
787 
788 	mas_unlock(&mas);
789 	for (i = 0; i < req_range_count; i += 5) {
790 #if DEBUG_REV_RANGE
791 		pr_debug("\tReverse request %d between %lu-%lu size %lu, should get %lu\n",
792 				i, req_range[i] >> 12,
793 				(req_range[i + 1] >> 12),
794 				req_range[i+2] >> 12,
795 				req_range[i+3] >> 12);
796 #endif
797 		check_mtree_alloc_rrange(mt,
798 				req_range[i]   >> 12, /* start */
799 				req_range[i+1] >> 12, /* end */
800 				req_range[i+2] >> 12, /* size */
801 				req_range[i+3] >> 12, /* expected address */
802 				req_range[i+4],       /* expected return */
803 				xa_mk_value(req_range[i] >> 12)); /* pointer */
804 		mt_validate(mt);
805 	}
806 
807 	mt_set_non_kernel(1);
808 	mtree_erase(mt, 34148798727); /* create a deleted range. */
809 	mtree_erase(mt, 34148798725);
810 	check_mtree_alloc_rrange(mt, 0, 34359052173, 210253414,
811 			34148798725, 0, mt);
812 
813 	mtree_destroy(mt);
814 }
815 
816 static noinline void __init check_alloc_range(struct maple_tree *mt)
817 {
818 	/*
819 	 * Generated by:
820 	 * cat /proc/self/maps|awk '{print $1}'|
821 	 * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}'
822 	 */
823 
824 	static const unsigned long range[] = {
825 	/*      Inclusive     , Exclusive. */
826 		0x565234af2000, 0x565234af4000,
827 		0x565234af4000, 0x565234af9000,
828 		0x565234af9000, 0x565234afb000,
829 		0x565234afc000, 0x565234afd000,
830 		0x565234afd000, 0x565234afe000,
831 		0x565235def000, 0x565235e10000,
832 		0x7f36d4bfd000, 0x7f36d4ee2000,
833 		0x7f36d4ee2000, 0x7f36d4f04000,
834 		0x7f36d4f04000, 0x7f36d504c000,
835 		0x7f36d504c000, 0x7f36d5098000,
836 		0x7f36d5098000, 0x7f36d5099000,
837 		0x7f36d5099000, 0x7f36d509d000,
838 		0x7f36d509d000, 0x7f36d509f000,
839 		0x7f36d509f000, 0x7f36d50a5000,
840 		0x7f36d50b9000, 0x7f36d50db000,
841 		0x7f36d50db000, 0x7f36d50dc000,
842 		0x7f36d50dc000, 0x7f36d50fa000,
843 		0x7f36d50fa000, 0x7f36d5102000,
844 		0x7f36d5102000, 0x7f36d5103000,
845 		0x7f36d5103000, 0x7f36d5104000,
846 		0x7f36d5104000, 0x7f36d5105000,
847 		0x7fff5876b000, 0x7fff5878d000,
848 		0x7fff5878e000, 0x7fff58791000,
849 		0x7fff58791000, 0x7fff58793000,
850 	};
851 	static const unsigned long holes[] = {
852 		/* Start of hole, end of hole,  size of hole (+1) */
853 		0x565234afb000, 0x565234afc000, 0x1000,
854 		0x565234afe000, 0x565235def000, 0x12F1000,
855 		0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000,
856 	};
857 
858 	/*
859 	 * req_range consists of 4 values.
860 	 * 1. min index
861 	 * 2. max index
862 	 * 3. size
863 	 * 4. number that should be returned.
864 	 * 5. return value
865 	 */
866 	static const unsigned long req_range[] = {
867 		0x565234af9000, /* Min */
868 		0x7fff58791000, /* Max */
869 		0x1000,         /* Size */
870 		0x565234afb000, /* First hole in our data of size 1000. */
871 		0,              /* Return value success. */
872 
873 		0x0,            /* Min */
874 		0x7fff58791000, /* Max */
875 		0x1F00,         /* Size */
876 		0x0,            /* First hole in our data of size 2000. */
877 		0,              /* Return value success. */
878 
879 		/* Test ascend. */
880 		34148797436 << 12, /* Min */
881 		0x7fff587AF000,    /* Max */
882 		0x3000,         /* Size */
883 		34148798629 << 12,             /* Expected location */
884 		0,              /* Return value success. */
885 
886 		/* Test failing. */
887 		34148798623 << 12,  /* Min */
888 		34148798683 << 12,  /* Max */
889 		0x15000,            /* Size */
890 		0,             /* Expected location */
891 		-EBUSY,              /* Return value failed. */
892 
893 		/* Test filling entire gap. */
894 		34148798623 << 12,  /* Min */
895 		0x7fff587AF000,    /* Max */
896 		0x10000,           /* Size */
897 		34148798632 << 12,             /* Expected location */
898 		0,              /* Return value success. */
899 
900 		/* Test walking off the end of root. */
901 		0,                  /* Min */
902 		-1,                 /* Max */
903 		-1,                 /* Size */
904 		0,                  /* Expected location */
905 		-EBUSY,             /* Return value failure. */
906 
907 		/* Test looking for too large a hole across entire range. */
908 		0,                  /* Min */
909 		-1,                 /* Max */
910 		4503599618982063UL << 12,  /* Size */
911 		34359052178 << 12,  /* Expected location */
912 		-EBUSY,             /* Return failure. */
913 
914 		/* Test a single entry */
915 		34148798648 << 12,		/* Min */
916 		34148798648 << 12,		/* Max */
917 		4096,			/* Size of 1 */
918 		34148798648 << 12,	/* Location is the same as min/max */
919 		0,			/* Success */
920 	};
921 	int i, range_count = ARRAY_SIZE(range);
922 	int req_range_count = ARRAY_SIZE(req_range);
923 	unsigned long min = 0x565234af2000;
924 	MA_STATE(mas, mt, 0, 0);
925 
926 	mtree_store_range(mt, MTREE_ALLOC_MAX, ULONG_MAX, XA_ZERO_ENTRY,
927 			  GFP_KERNEL);
928 	for (i = 0; i < range_count; i += 2) {
929 #define DEBUG_ALLOC_RANGE 0
930 #if DEBUG_ALLOC_RANGE
931 		pr_debug("\tInsert %lu-%lu\n", range[i] >> 12,
932 			 (range[i + 1] >> 12) - 1);
933 		mt_dump(mt, mt_dump_hex);
934 #endif
935 		check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1,
936 				xa_mk_value(range[i] >> 12), 0);
937 		mt_validate(mt);
938 	}
939 
940 
941 
942 	mas_lock(&mas);
943 	for (i = 0; i < ARRAY_SIZE(holes); i += 3) {
944 
945 #if DEBUG_ALLOC_RANGE
946 		pr_debug("\tGet empty %lu-%lu size %lu (%lx-%lx)\n", min >> 12,
947 			holes[i+1] >> 12, holes[i+2] >> 12,
948 			min, holes[i+1]);
949 #endif
950 		MT_BUG_ON(mt, mas_empty_area(&mas, min >> 12,
951 					holes[i+1] >> 12,
952 					holes[i+2] >> 12));
953 		MT_BUG_ON(mt, mas.index != holes[i] >> 12);
954 		min = holes[i+1];
955 		mas_reset(&mas);
956 	}
957 	mas_unlock(&mas);
958 	for (i = 0; i < req_range_count; i += 5) {
959 #if DEBUG_ALLOC_RANGE
960 		pr_debug("\tTest %d: %lu-%lu size %lu expected %lu (%lu-%lu)\n",
961 			 i/5, req_range[i]   >> 12, req_range[i + 1]   >> 12,
962 			 req_range[i + 2]   >> 12, req_range[i + 3]   >> 12,
963 			 req_range[i], req_range[i+1]);
964 #endif
965 		check_mtree_alloc_range(mt,
966 				req_range[i]   >> 12, /* start */
967 				req_range[i+1] >> 12, /* end */
968 				req_range[i+2] >> 12, /* size */
969 				req_range[i+3] >> 12, /* expected address */
970 				req_range[i+4],       /* expected return */
971 				xa_mk_value(req_range[i] >> 12)); /* pointer */
972 		mt_validate(mt);
973 #if DEBUG_ALLOC_RANGE
974 		mt_dump(mt, mt_dump_hex);
975 #endif
976 	}
977 
978 	mtree_destroy(mt);
979 }
980 #endif
981 
982 static noinline void __init check_ranges(struct maple_tree *mt)
983 {
984 	int i, val, val2;
985 	static const unsigned long r[] = {
986 		10, 15,
987 		20, 25,
988 		17, 22, /* Overlaps previous range. */
989 		9, 1000, /* Huge. */
990 		100, 200,
991 		45, 168,
992 		118, 128,
993 			};
994 
995 	MT_BUG_ON(mt, !mtree_empty(mt));
996 	check_insert_range(mt, r[0], r[1], xa_mk_value(r[0]), 0);
997 	check_insert_range(mt, r[2], r[3], xa_mk_value(r[2]), 0);
998 	check_insert_range(mt, r[4], r[5], xa_mk_value(r[4]), -EEXIST);
999 	MT_BUG_ON(mt, !mt_height(mt));
1000 	/* Store */
1001 	check_store_range(mt, r[4], r[5], xa_mk_value(r[4]), 0);
1002 	check_store_range(mt, r[6], r[7], xa_mk_value(r[6]), 0);
1003 	check_store_range(mt, r[8], r[9], xa_mk_value(r[8]), 0);
1004 	MT_BUG_ON(mt, !mt_height(mt));
1005 	mtree_destroy(mt);
1006 	MT_BUG_ON(mt, mt_height(mt));
1007 
1008 	check_seq(mt, 50, false);
1009 	mt_set_non_kernel(4);
1010 	check_store_range(mt, 5, 47,  xa_mk_value(47), 0);
1011 	MT_BUG_ON(mt, !mt_height(mt));
1012 	mtree_destroy(mt);
1013 
1014 	/* Create tree of 1-100 */
1015 	check_seq(mt, 100, false);
1016 	/* Store 45-168 */
1017 	mt_set_non_kernel(10);
1018 	check_store_range(mt, r[10], r[11], xa_mk_value(r[10]), 0);
1019 	MT_BUG_ON(mt, !mt_height(mt));
1020 	mtree_destroy(mt);
1021 
1022 	/* Create tree of 1-200 */
1023 	check_seq(mt, 200, false);
1024 	/* Store 45-168 */
1025 	check_store_range(mt, r[10], r[11], xa_mk_value(r[10]), 0);
1026 	MT_BUG_ON(mt, !mt_height(mt));
1027 	mtree_destroy(mt);
1028 
1029 	check_seq(mt, 30, false);
1030 	check_store_range(mt, 6, 18, xa_mk_value(6), 0);
1031 	MT_BUG_ON(mt, !mt_height(mt));
1032 	mtree_destroy(mt);
1033 
1034 	/* Overwrite across multiple levels. */
1035 	/* Create tree of 1-400 */
1036 	check_seq(mt, 400, false);
1037 	mt_set_non_kernel(50);
1038 	/* Store 118-128 */
1039 	check_store_range(mt, r[12], r[13], xa_mk_value(r[12]), 0);
1040 	mt_set_non_kernel(50);
1041 	mtree_test_erase(mt, 140);
1042 	mtree_test_erase(mt, 141);
1043 	mtree_test_erase(mt, 142);
1044 	mtree_test_erase(mt, 143);
1045 	mtree_test_erase(mt, 130);
1046 	mtree_test_erase(mt, 131);
1047 	mtree_test_erase(mt, 132);
1048 	mtree_test_erase(mt, 133);
1049 	mtree_test_erase(mt, 134);
1050 	mtree_test_erase(mt, 135);
1051 	check_load(mt, r[12], xa_mk_value(r[12]));
1052 	check_load(mt, r[13], xa_mk_value(r[12]));
1053 	check_load(mt, r[13] - 1, xa_mk_value(r[12]));
1054 	check_load(mt, r[13] + 1, xa_mk_value(r[13] + 1));
1055 	check_load(mt, 135, NULL);
1056 	check_load(mt, 140, NULL);
1057 	mt_set_non_kernel(0);
1058 	MT_BUG_ON(mt, !mt_height(mt));
1059 	mtree_destroy(mt);
1060 
1061 
1062 
1063 	/* Overwrite multiple levels at the end of the tree (slot 7) */
1064 	mt_set_non_kernel(50);
1065 	check_seq(mt, 400, false);
1066 	check_store_range(mt, 353, 361, xa_mk_value(353), 0);
1067 	check_store_range(mt, 347, 352, xa_mk_value(347), 0);
1068 
1069 	check_load(mt, 346, xa_mk_value(346));
1070 	for (i = 347; i <= 352; i++)
1071 		check_load(mt, i, xa_mk_value(347));
1072 	for (i = 353; i <= 361; i++)
1073 		check_load(mt, i, xa_mk_value(353));
1074 	check_load(mt, 362, xa_mk_value(362));
1075 	mt_set_non_kernel(0);
1076 	MT_BUG_ON(mt, !mt_height(mt));
1077 	mtree_destroy(mt);
1078 
1079 	mt_set_non_kernel(50);
1080 	check_seq(mt, 400, false);
1081 	check_store_range(mt, 352, 364, NULL, 0);
1082 	check_store_range(mt, 351, 363, xa_mk_value(352), 0);
1083 	check_load(mt, 350, xa_mk_value(350));
1084 	check_load(mt, 351, xa_mk_value(352));
1085 	for (i = 352; i <= 363; i++)
1086 		check_load(mt, i, xa_mk_value(352));
1087 	check_load(mt, 364, NULL);
1088 	check_load(mt, 365, xa_mk_value(365));
1089 	mt_set_non_kernel(0);
1090 	MT_BUG_ON(mt, !mt_height(mt));
1091 	mtree_destroy(mt);
1092 
1093 	mt_set_non_kernel(5);
1094 	check_seq(mt, 400, false);
1095 	check_store_range(mt, 352, 364, NULL, 0);
1096 	check_store_range(mt, 351, 364, xa_mk_value(352), 0);
1097 	check_load(mt, 350, xa_mk_value(350));
1098 	check_load(mt, 351, xa_mk_value(352));
1099 	for (i = 352; i <= 364; i++)
1100 		check_load(mt, i, xa_mk_value(352));
1101 	check_load(mt, 365, xa_mk_value(365));
1102 	mt_set_non_kernel(0);
1103 	MT_BUG_ON(mt, !mt_height(mt));
1104 	mtree_destroy(mt);
1105 
1106 
1107 	mt_set_non_kernel(50);
1108 	check_seq(mt, 400, false);
1109 	check_store_range(mt, 362, 367, xa_mk_value(362), 0);
1110 	check_store_range(mt, 353, 361, xa_mk_value(353), 0);
1111 	mt_set_non_kernel(0);
1112 	mt_validate(mt);
1113 	MT_BUG_ON(mt, !mt_height(mt));
1114 	mtree_destroy(mt);
1115 	/*
1116 	 * Interesting cases:
1117 	 * 1. Overwrite the end of a node and end in the first entry of the next
1118 	 * node.
1119 	 * 2. Split a single range
1120 	 * 3. Overwrite the start of a range
1121 	 * 4. Overwrite the end of a range
1122 	 * 5. Overwrite the entire range
1123 	 * 6. Overwrite a range that causes multiple parent nodes to be
1124 	 * combined
1125 	 * 7. Overwrite a range that causes multiple parent nodes and part of
1126 	 * root to be combined
1127 	 * 8. Overwrite the whole tree
1128 	 * 9. Try to overwrite the zero entry of an alloc tree.
1129 	 * 10. Write a range larger than a nodes current pivot
1130 	 */
1131 
1132 	mt_set_non_kernel(50);
1133 	for (i = 0; i <= 500; i++) {
1134 		val = i*5;
1135 		val2 = (i+1)*5;
1136 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1137 	}
1138 	check_store_range(mt, 2400, 2400, xa_mk_value(2400), 0);
1139 	check_store_range(mt, 2411, 2411, xa_mk_value(2411), 0);
1140 	check_store_range(mt, 2412, 2412, xa_mk_value(2412), 0);
1141 	check_store_range(mt, 2396, 2400, xa_mk_value(4052020), 0);
1142 	check_store_range(mt, 2402, 2402, xa_mk_value(2402), 0);
1143 	mtree_destroy(mt);
1144 	mt_set_non_kernel(0);
1145 
1146 	mt_set_non_kernel(50);
1147 	for (i = 0; i <= 500; i++) {
1148 		val = i*5;
1149 		val2 = (i+1)*5;
1150 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1151 	}
1152 	check_store_range(mt, 2422, 2422, xa_mk_value(2422), 0);
1153 	check_store_range(mt, 2424, 2424, xa_mk_value(2424), 0);
1154 	check_store_range(mt, 2425, 2425, xa_mk_value(2), 0);
1155 	check_store_range(mt, 2460, 2470, NULL, 0);
1156 	check_store_range(mt, 2435, 2460, xa_mk_value(2435), 0);
1157 	check_store_range(mt, 2461, 2470, xa_mk_value(2461), 0);
1158 	mt_set_non_kernel(0);
1159 	MT_BUG_ON(mt, !mt_height(mt));
1160 	mtree_destroy(mt);
1161 
1162 	/* Check in-place modifications */
1163 	mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
1164 	/* Append to the start of last range */
1165 	mt_set_non_kernel(50);
1166 	for (i = 0; i <= 500; i++) {
1167 		val = i * 5 + 1;
1168 		val2 = val + 4;
1169 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1170 	}
1171 
1172 	/* Append to the last range without touching any boundaries */
1173 	for (i = 0; i < 10; i++) {
1174 		val = val2 + 5;
1175 		val2 = val + 4;
1176 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1177 	}
1178 
1179 	/* Append to the end of last range */
1180 	val = val2;
1181 	for (i = 0; i < 10; i++) {
1182 		val += 5;
1183 		MT_BUG_ON(mt, mtree_test_store_range(mt, val, ULONG_MAX,
1184 						     xa_mk_value(val)) != 0);
1185 	}
1186 
1187 	/* Overwriting the range and over a part of the next range */
1188 	for (i = 10; i < 30; i += 2) {
1189 		val = i * 5 + 1;
1190 		val2 = val + 5;
1191 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1192 	}
1193 
1194 	/* Overwriting a part of the range and over the next range */
1195 	for (i = 50; i < 70; i += 2) {
1196 		val2 = i * 5;
1197 		val = val2 - 5;
1198 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1199 	}
1200 
1201 	/*
1202 	 * Expand the range, only partially overwriting the previous and
1203 	 * next ranges
1204 	 */
1205 	for (i = 100; i < 130; i += 3) {
1206 		val = i * 5 - 5;
1207 		val2 = i * 5 + 1;
1208 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1209 	}
1210 
1211 	/*
1212 	 * Expand the range, only partially overwriting the previous and
1213 	 * next ranges, in RCU mode
1214 	 */
1215 	mt_set_in_rcu(mt);
1216 	for (i = 150; i < 180; i += 3) {
1217 		val = i * 5 - 5;
1218 		val2 = i * 5 + 1;
1219 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1220 	}
1221 
1222 	MT_BUG_ON(mt, !mt_height(mt));
1223 	mt_validate(mt);
1224 	mt_set_non_kernel(0);
1225 	mtree_destroy(mt);
1226 
1227 	/* Test rebalance gaps */
1228 	mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
1229 	mt_set_non_kernel(50);
1230 	for (i = 0; i <= 50; i++) {
1231 		val = i*10;
1232 		val2 = (i+1)*10;
1233 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1234 	}
1235 	check_store_range(mt, 161, 161, xa_mk_value(161), 0);
1236 	check_store_range(mt, 162, 162, xa_mk_value(162), 0);
1237 	check_store_range(mt, 163, 163, xa_mk_value(163), 0);
1238 	check_store_range(mt, 240, 249, NULL, 0);
1239 	mtree_erase(mt, 200);
1240 	mtree_erase(mt, 210);
1241 	mtree_erase(mt, 220);
1242 	mtree_erase(mt, 230);
1243 	mt_set_non_kernel(0);
1244 	MT_BUG_ON(mt, !mt_height(mt));
1245 	mtree_destroy(mt);
1246 
1247 	mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
1248 	for (i = 0; i <= 500; i++) {
1249 		val = i*10;
1250 		val2 = (i+1)*10;
1251 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1252 	}
1253 	check_store_range(mt, 4600, 4959, xa_mk_value(1), 0);
1254 	mt_validate(mt);
1255 	MT_BUG_ON(mt, !mt_height(mt));
1256 	mtree_destroy(mt);
1257 
1258 	mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
1259 	for (i = 0; i <= 500; i++) {
1260 		val = i*10;
1261 		val2 = (i+1)*10;
1262 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1263 	}
1264 	check_store_range(mt, 4811, 4811, xa_mk_value(4811), 0);
1265 	check_store_range(mt, 4812, 4812, xa_mk_value(4812), 0);
1266 	check_store_range(mt, 4861, 4861, xa_mk_value(4861), 0);
1267 	check_store_range(mt, 4862, 4862, xa_mk_value(4862), 0);
1268 	check_store_range(mt, 4842, 4849, NULL, 0);
1269 	mt_validate(mt);
1270 	MT_BUG_ON(mt, !mt_height(mt));
1271 	mtree_destroy(mt);
1272 
1273 	mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
1274 	for (i = 0; i <= 1300; i++) {
1275 		val = i*10;
1276 		val2 = (i+1)*10;
1277 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1278 		MT_BUG_ON(mt, mt_height(mt) >= 4);
1279 	}
1280 	/*  Cause a 3 child split all the way up the tree. */
1281 	for (i = 5; i < 215; i += 10)
1282 		check_store_range(mt, 11450 + i, 11450 + i + 1, NULL, 0);
1283 	for (i = 5; i < 65; i += 10)
1284 		check_store_range(mt, 11770 + i, 11770 + i + 1, NULL, 0);
1285 
1286 	MT_BUG_ON(mt, mt_height(mt) >= 4);
1287 	for (i = 5; i < 45; i += 10)
1288 		check_store_range(mt, 11700 + i, 11700 + i + 1, NULL, 0);
1289 	if (!MAPLE_32BIT)
1290 		MT_BUG_ON(mt, mt_height(mt) < 4);
1291 	mtree_destroy(mt);
1292 
1293 
1294 	mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
1295 	for (i = 0; i <= 1200; i++) {
1296 		val = i*10;
1297 		val2 = (i+1)*10;
1298 		check_store_range(mt, val, val2, xa_mk_value(val), 0);
1299 		MT_BUG_ON(mt, mt_height(mt) >= 4);
1300 	}
1301 	/* Fill parents and leaves before split. */
1302 	for (i = 5; i < 455; i += 10)
1303 		check_store_range(mt, 7800 + i, 7800 + i + 1, NULL, 0);
1304 
1305 	for (i = 1; i < 16; i++)
1306 		check_store_range(mt, 8185 + i, 8185 + i + 1,
1307 				  xa_mk_value(8185+i), 0);
1308 	MT_BUG_ON(mt, mt_height(mt) >= 4);
1309 	/* triple split across multiple levels. */
1310 	check_store_range(mt, 8184, 8184, xa_mk_value(8184), 0);
1311 	if (!MAPLE_32BIT)
1312 		MT_BUG_ON(mt, mt_height(mt) != 4);
1313 }
1314 
1315 static noinline void __init check_next_entry(struct maple_tree *mt)
1316 {
1317 	void *entry = NULL;
1318 	unsigned long limit = 30, i = 0;
1319 	MA_STATE(mas, mt, i, i);
1320 
1321 	MT_BUG_ON(mt, !mtree_empty(mt));
1322 
1323 	check_seq(mt, limit, false);
1324 	rcu_read_lock();
1325 
1326 	/* Check the first one and get ma_state in the correct state. */
1327 	MT_BUG_ON(mt, mas_walk(&mas) != xa_mk_value(i++));
1328 	for ( ; i <= limit + 1; i++) {
1329 		entry = mas_next(&mas, limit);
1330 		if (i > limit)
1331 			MT_BUG_ON(mt, entry != NULL);
1332 		else
1333 			MT_BUG_ON(mt, xa_mk_value(i) != entry);
1334 	}
1335 	rcu_read_unlock();
1336 	mtree_destroy(mt);
1337 }
1338 
1339 static noinline void __init check_prev_entry(struct maple_tree *mt)
1340 {
1341 	unsigned long index = 16;
1342 	void *value;
1343 	int i;
1344 
1345 	MA_STATE(mas, mt, index, index);
1346 
1347 	MT_BUG_ON(mt, !mtree_empty(mt));
1348 	check_seq(mt, 30, false);
1349 
1350 	rcu_read_lock();
1351 	value = mas_find(&mas, ULONG_MAX);
1352 	MT_BUG_ON(mt, value != xa_mk_value(index));
1353 	value = mas_prev(&mas, 0);
1354 	MT_BUG_ON(mt, value != xa_mk_value(index - 1));
1355 	rcu_read_unlock();
1356 	mtree_destroy(mt);
1357 
1358 	/* Check limits on prev */
1359 	mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
1360 	mas_lock(&mas);
1361 	for (i = 0; i <= index; i++) {
1362 		mas_set_range(&mas, i*10, i*10+5);
1363 		mas_store_gfp(&mas, xa_mk_value(i), GFP_KERNEL);
1364 	}
1365 
1366 	mas_set(&mas, 20);
1367 	value = mas_walk(&mas);
1368 	MT_BUG_ON(mt, value != xa_mk_value(2));
1369 
1370 	value = mas_prev(&mas, 19);
1371 	MT_BUG_ON(mt, value != NULL);
1372 
1373 	mas_set(&mas, 80);
1374 	value = mas_walk(&mas);
1375 	MT_BUG_ON(mt, value != xa_mk_value(8));
1376 
1377 	value = mas_prev(&mas, 76);
1378 	MT_BUG_ON(mt, value != NULL);
1379 
1380 	mas_unlock(&mas);
1381 }
1382 
1383 static noinline void __init check_root_expand(struct maple_tree *mt)
1384 {
1385 	MA_STATE(mas, mt, 0, 0);
1386 	void *ptr;
1387 
1388 
1389 	mas_lock(&mas);
1390 	mas_set(&mas, 3);
1391 	ptr = mas_walk(&mas);
1392 	MT_BUG_ON(mt, mas.index != 0);
1393 	MT_BUG_ON(mt, ptr != NULL);
1394 	MT_BUG_ON(mt, mas.index != 0);
1395 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
1396 
1397 	ptr = &check_prev_entry;
1398 	mas_set(&mas, 1);
1399 	mas_store_gfp(&mas, ptr, GFP_KERNEL);
1400 
1401 	mas_set(&mas, 0);
1402 	ptr = mas_walk(&mas);
1403 	MT_BUG_ON(mt, ptr != NULL);
1404 
1405 	mas_set(&mas, 1);
1406 	ptr = mas_walk(&mas);
1407 	MT_BUG_ON(mt, ptr != &check_prev_entry);
1408 
1409 	mas_set(&mas, 2);
1410 	ptr = mas_walk(&mas);
1411 	MT_BUG_ON(mt, ptr != NULL);
1412 	mas_unlock(&mas);
1413 	mtree_destroy(mt);
1414 
1415 
1416 	mt_init_flags(mt, 0);
1417 	mas_lock(&mas);
1418 
1419 	mas_set(&mas, 0);
1420 	ptr = &check_prev_entry;
1421 	mas_store_gfp(&mas, ptr, GFP_KERNEL);
1422 
1423 	mas_set(&mas, 5);
1424 	ptr = mas_walk(&mas);
1425 	MT_BUG_ON(mt, ptr != NULL);
1426 	MT_BUG_ON(mt, mas.index != 1);
1427 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
1428 
1429 	mas_set_range(&mas, 0, 100);
1430 	ptr = mas_walk(&mas);
1431 	MT_BUG_ON(mt, ptr != &check_prev_entry);
1432 	MT_BUG_ON(mt, mas.last != 0);
1433 	mas_unlock(&mas);
1434 	mtree_destroy(mt);
1435 
1436 	mt_init_flags(mt, 0);
1437 	mas_lock(&mas);
1438 
1439 	mas_set(&mas, 0);
1440 	ptr = (void *)((unsigned long) check_prev_entry | 1UL);
1441 	mas_store_gfp(&mas, ptr, GFP_KERNEL);
1442 	ptr = mas_next(&mas, ULONG_MAX);
1443 	MT_BUG_ON(mt, ptr != NULL);
1444 	MT_BUG_ON(mt, (mas.index != 1) && (mas.last != ULONG_MAX));
1445 
1446 	mas_set(&mas, 1);
1447 	ptr = mas_prev(&mas, 0);
1448 	MT_BUG_ON(mt, (mas.index != 0) && (mas.last != 0));
1449 	MT_BUG_ON(mt, ptr != (void *)((unsigned long) check_prev_entry | 1UL));
1450 
1451 	mas_unlock(&mas);
1452 
1453 	mtree_destroy(mt);
1454 
1455 	mt_init_flags(mt, 0);
1456 	mas_lock(&mas);
1457 	mas_set(&mas, 0);
1458 	ptr = (void *)((unsigned long) check_prev_entry | 2UL);
1459 	mas_store_gfp(&mas, ptr, GFP_KERNEL);
1460 	ptr = mas_next(&mas, ULONG_MAX);
1461 	MT_BUG_ON(mt, ptr != NULL);
1462 	MT_BUG_ON(mt, (mas.index != ULONG_MAX) && (mas.last != ULONG_MAX));
1463 
1464 	mas_set(&mas, 1);
1465 	ptr = mas_prev(&mas, 0);
1466 	MT_BUG_ON(mt, (mas.index != 0) && (mas.last != 0));
1467 	MT_BUG_ON(mt, ptr != (void *)((unsigned long) check_prev_entry | 2UL));
1468 
1469 
1470 	mas_unlock(&mas);
1471 }
1472 
1473 static noinline void __init check_gap_combining(struct maple_tree *mt)
1474 {
1475 	struct maple_enode *mn1, *mn2;
1476 	void *entry;
1477 	unsigned long singletons = 100;
1478 	static const unsigned long *seq100;
1479 	static const unsigned long seq100_64[] = {
1480 		/* 0-5 */
1481 		74, 75, 76,
1482 		50, 100, 2,
1483 
1484 		/* 6-12 */
1485 		44, 45, 46, 43,
1486 		20, 50, 3,
1487 
1488 		/* 13-20*/
1489 		80, 81, 82,
1490 		76, 2, 79, 85, 4,
1491 	};
1492 
1493 	static const unsigned long seq100_32[] = {
1494 		/* 0-5 */
1495 		61, 62, 63,
1496 		50, 100, 2,
1497 
1498 		/* 6-12 */
1499 		31, 32, 33, 30,
1500 		20, 50, 3,
1501 
1502 		/* 13-20*/
1503 		80, 81, 82,
1504 		76, 2, 79, 85, 4,
1505 	};
1506 
1507 	static const unsigned long seq2000[] = {
1508 		1152, 1151,
1509 		1100, 1200, 2,
1510 	};
1511 	static const unsigned long seq400[] = {
1512 		286, 318,
1513 		256, 260, 266, 270, 275, 280, 290, 398,
1514 		286, 310,
1515 	};
1516 
1517 	unsigned long index;
1518 
1519 	MA_STATE(mas, mt, 0, 0);
1520 
1521 	if (MAPLE_32BIT)
1522 		seq100 = seq100_32;
1523 	else
1524 		seq100 = seq100_64;
1525 
1526 	index = seq100[0];
1527 	mas_set(&mas, index);
1528 	MT_BUG_ON(mt, !mtree_empty(mt));
1529 	check_seq(mt, singletons, false); /* create 100 singletons. */
1530 
1531 	mt_set_non_kernel(1);
1532 	mtree_test_erase(mt, seq100[2]);
1533 	check_load(mt, seq100[2], NULL);
1534 	mtree_test_erase(mt, seq100[1]);
1535 	check_load(mt, seq100[1], NULL);
1536 
1537 	rcu_read_lock();
1538 	entry = mas_find(&mas, ULONG_MAX);
1539 	MT_BUG_ON(mt, entry != xa_mk_value(index));
1540 	mn1 = mas.node;
1541 	mas_next(&mas, ULONG_MAX);
1542 	entry = mas_next(&mas, ULONG_MAX);
1543 	MT_BUG_ON(mt, entry != xa_mk_value(index + 4));
1544 	mn2 = mas.node;
1545 	MT_BUG_ON(mt, mn1 == mn2); /* test the test. */
1546 
1547 	/*
1548 	 * At this point, there is a gap of 2 at index + 1 between seq100[3] and
1549 	 * seq100[4]. Search for the gap.
1550 	 */
1551 	mt_set_non_kernel(1);
1552 	mas_reset(&mas);
1553 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[3], seq100[4],
1554 					     seq100[5]));
1555 	MT_BUG_ON(mt, mas.index != index + 1);
1556 	rcu_read_unlock();
1557 
1558 	mtree_test_erase(mt, seq100[6]);
1559 	check_load(mt, seq100[6], NULL);
1560 	mtree_test_erase(mt, seq100[7]);
1561 	check_load(mt, seq100[7], NULL);
1562 	mtree_test_erase(mt, seq100[8]);
1563 	index = seq100[9];
1564 
1565 	rcu_read_lock();
1566 	mas.index = index;
1567 	mas.last = index;
1568 	mas_reset(&mas);
1569 	entry = mas_find(&mas, ULONG_MAX);
1570 	MT_BUG_ON(mt, entry != xa_mk_value(index));
1571 	mn1 = mas.node;
1572 	entry = mas_next(&mas, ULONG_MAX);
1573 	MT_BUG_ON(mt, entry != xa_mk_value(index + 4));
1574 	mas_next(&mas, ULONG_MAX); /* go to the next entry. */
1575 	mn2 = mas.node;
1576 	MT_BUG_ON(mt, mn1 == mn2); /* test the next entry is in the next node. */
1577 
1578 	/*
1579 	 * At this point, there is a gap of 3 at seq100[6].  Find it by
1580 	 * searching 20 - 50 for size 3.
1581 	 */
1582 	mas_reset(&mas);
1583 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[10], seq100[11],
1584 					     seq100[12]));
1585 	MT_BUG_ON(mt, mas.index != seq100[6]);
1586 	rcu_read_unlock();
1587 
1588 	mt_set_non_kernel(1);
1589 	mtree_store(mt, seq100[13], NULL, GFP_KERNEL);
1590 	check_load(mt, seq100[13], NULL);
1591 	check_load(mt, seq100[14], xa_mk_value(seq100[14]));
1592 	mtree_store(mt, seq100[14], NULL, GFP_KERNEL);
1593 	check_load(mt, seq100[13], NULL);
1594 	check_load(mt, seq100[14], NULL);
1595 
1596 	mas_reset(&mas);
1597 	rcu_read_lock();
1598 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[16], seq100[15],
1599 					     seq100[17]));
1600 	MT_BUG_ON(mt, mas.index != seq100[13]);
1601 	mt_validate(mt);
1602 	rcu_read_unlock();
1603 
1604 	/*
1605 	 * *DEPRECATED: no retries anymore* Test retry entry in the start of a
1606 	 * gap.
1607 	 */
1608 	mt_set_non_kernel(2);
1609 	mtree_test_store_range(mt, seq100[18], seq100[14], NULL);
1610 	mtree_test_erase(mt, seq100[15]);
1611 	mas_reset(&mas);
1612 	rcu_read_lock();
1613 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[16], seq100[19],
1614 					     seq100[20]));
1615 	rcu_read_unlock();
1616 	MT_BUG_ON(mt, mas.index != seq100[18]);
1617 	mt_validate(mt);
1618 	mtree_destroy(mt);
1619 
1620 	/* seq 2000 tests are for multi-level tree gaps */
1621 	mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
1622 	check_seq(mt, 2000, false);
1623 	mt_set_non_kernel(1);
1624 	mtree_test_erase(mt, seq2000[0]);
1625 	mtree_test_erase(mt, seq2000[1]);
1626 
1627 	mt_set_non_kernel(2);
1628 	mas_reset(&mas);
1629 	rcu_read_lock();
1630 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq2000[2], seq2000[3],
1631 					     seq2000[4]));
1632 	MT_BUG_ON(mt, mas.index != seq2000[1]);
1633 	rcu_read_unlock();
1634 	mt_validate(mt);
1635 	mtree_destroy(mt);
1636 
1637 	/* seq 400 tests rebalancing over two levels. */
1638 	mt_set_non_kernel(99);
1639 	mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
1640 	check_seq(mt, 400, false);
1641 	mtree_test_store_range(mt, seq400[0], seq400[1], NULL);
1642 	mt_set_non_kernel(0);
1643 	mtree_destroy(mt);
1644 
1645 	mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
1646 	check_seq(mt, 400, false);
1647 	mt_set_non_kernel(50);
1648 	mtree_test_store_range(mt, seq400[2], seq400[9],
1649 			       xa_mk_value(seq400[2]));
1650 	mtree_test_store_range(mt, seq400[3], seq400[9],
1651 			       xa_mk_value(seq400[3]));
1652 	mtree_test_store_range(mt, seq400[4], seq400[9],
1653 			       xa_mk_value(seq400[4]));
1654 	mtree_test_store_range(mt, seq400[5], seq400[9],
1655 			       xa_mk_value(seq400[5]));
1656 	mtree_test_store_range(mt, seq400[0], seq400[9],
1657 			       xa_mk_value(seq400[0]));
1658 	mtree_test_store_range(mt, seq400[6], seq400[9],
1659 			       xa_mk_value(seq400[6]));
1660 	mtree_test_store_range(mt, seq400[7], seq400[9],
1661 			       xa_mk_value(seq400[7]));
1662 	mtree_test_store_range(mt, seq400[8], seq400[9],
1663 			       xa_mk_value(seq400[8]));
1664 	mtree_test_store_range(mt, seq400[10], seq400[11],
1665 			       xa_mk_value(seq400[10]));
1666 	mt_validate(mt);
1667 	mt_set_non_kernel(0);
1668 	mtree_destroy(mt);
1669 }
1670 static noinline void __init check_node_overwrite(struct maple_tree *mt)
1671 {
1672 	int i, max = 4000;
1673 
1674 	for (i = 0; i < max; i++)
1675 		mtree_test_store_range(mt, i*100, i*100 + 50, xa_mk_value(i*100));
1676 
1677 	mtree_test_store_range(mt, 319951, 367950, NULL);
1678 	/*mt_dump(mt, mt_dump_dec); */
1679 	mt_validate(mt);
1680 }
1681 
1682 #if defined(BENCH_SLOT_STORE)
1683 static noinline void __init bench_slot_store(struct maple_tree *mt)
1684 {
1685 	int i, brk = 105, max = 1040, brk_start = 100, count = 20000000;
1686 
1687 	for (i = 0; i < max; i += 10)
1688 		mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL);
1689 
1690 	for (i = 0; i < count; i++) {
1691 		mtree_store_range(mt, brk, brk, NULL, GFP_KERNEL);
1692 		mtree_store_range(mt, brk_start, brk, xa_mk_value(brk),
1693 				  GFP_KERNEL);
1694 	}
1695 }
1696 #endif
1697 
1698 #if defined(BENCH_NODE_STORE)
1699 static noinline void __init bench_node_store(struct maple_tree *mt)
1700 {
1701 	int i, overwrite = 76, max = 240, count = 20000000;
1702 
1703 	for (i = 0; i < max; i += 10)
1704 		mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL);
1705 
1706 	for (i = 0; i < count; i++) {
1707 		mtree_store_range(mt, overwrite,  overwrite + 15,
1708 				  xa_mk_value(overwrite), GFP_KERNEL);
1709 
1710 		overwrite += 5;
1711 		if (overwrite >= 135)
1712 			overwrite = 76;
1713 	}
1714 }
1715 #endif
1716 
1717 #if defined(BENCH_AWALK)
1718 static noinline void __init bench_awalk(struct maple_tree *mt)
1719 {
1720 	int i, max = 2500, count = 50000000;
1721 	MA_STATE(mas, mt, 1470, 1470);
1722 
1723 	for (i = 0; i < max; i += 10)
1724 		mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL);
1725 
1726 	mtree_store_range(mt, 1470, 1475, NULL, GFP_KERNEL);
1727 
1728 	for (i = 0; i < count; i++) {
1729 		mas_empty_area_rev(&mas, 0, 2000, 10);
1730 		mas_reset(&mas);
1731 	}
1732 }
1733 #endif
1734 #if defined(BENCH_WALK)
1735 static noinline void __init bench_walk(struct maple_tree *mt)
1736 {
1737 	int i, max = 2500, count = 550000000;
1738 	MA_STATE(mas, mt, 1470, 1470);
1739 
1740 	for (i = 0; i < max; i += 10)
1741 		mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL);
1742 
1743 	for (i = 0; i < count; i++) {
1744 		mas_walk(&mas);
1745 		mas_reset(&mas);
1746 	}
1747 
1748 }
1749 #endif
1750 
1751 #if defined(BENCH_MT_FOR_EACH)
1752 static noinline void __init bench_mt_for_each(struct maple_tree *mt)
1753 {
1754 	int i, count = 1000000;
1755 	unsigned long max = 2500, index = 0;
1756 	void *entry;
1757 
1758 	for (i = 0; i < max; i += 5)
1759 		mtree_store_range(mt, i, i + 4, xa_mk_value(i), GFP_KERNEL);
1760 
1761 	for (i = 0; i < count; i++) {
1762 		unsigned long j = 0;
1763 
1764 		mt_for_each(mt, entry, index, max) {
1765 			MT_BUG_ON(mt, entry != xa_mk_value(j));
1766 			j += 5;
1767 		}
1768 
1769 		index = 0;
1770 	}
1771 
1772 }
1773 #endif
1774 
1775 #if defined(BENCH_MAS_FOR_EACH)
1776 static noinline void __init bench_mas_for_each(struct maple_tree *mt)
1777 {
1778 	int i, count = 1000000;
1779 	unsigned long max = 2500;
1780 	void *entry;
1781 	MA_STATE(mas, mt, 0, 0);
1782 
1783 	for (i = 0; i < max; i += 5) {
1784 		int gap = 4;
1785 
1786 		if (i % 30 == 0)
1787 			gap = 3;
1788 		mtree_store_range(mt, i, i + gap, xa_mk_value(i), GFP_KERNEL);
1789 	}
1790 
1791 	rcu_read_lock();
1792 	for (i = 0; i < count; i++) {
1793 		unsigned long j = 0;
1794 
1795 		mas_for_each(&mas, entry, max) {
1796 			MT_BUG_ON(mt, entry != xa_mk_value(j));
1797 			j += 5;
1798 		}
1799 		mas_set(&mas, 0);
1800 	}
1801 	rcu_read_unlock();
1802 
1803 }
1804 #endif
1805 #if defined(BENCH_MAS_PREV)
1806 static noinline void __init bench_mas_prev(struct maple_tree *mt)
1807 {
1808 	int i, count = 1000000;
1809 	unsigned long max = 2500;
1810 	void *entry;
1811 	MA_STATE(mas, mt, 0, 0);
1812 
1813 	for (i = 0; i < max; i += 5) {
1814 		int gap = 4;
1815 
1816 		if (i % 30 == 0)
1817 			gap = 3;
1818 		mtree_store_range(mt, i, i + gap, xa_mk_value(i), GFP_KERNEL);
1819 	}
1820 
1821 	rcu_read_lock();
1822 	for (i = 0; i < count; i++) {
1823 		unsigned long j = 2495;
1824 
1825 		mas_set(&mas, ULONG_MAX);
1826 		while ((entry = mas_prev(&mas, 0)) != NULL) {
1827 			MT_BUG_ON(mt, entry != xa_mk_value(j));
1828 			j -= 5;
1829 		}
1830 	}
1831 	rcu_read_unlock();
1832 
1833 }
1834 #endif
1835 /* check_forking - simulate the kernel forking sequence with the tree. */
1836 static noinline void __init check_forking(struct maple_tree *mt)
1837 {
1838 
1839 	struct maple_tree newmt;
1840 	int i, nr_entries = 134;
1841 	void *val;
1842 	MA_STATE(mas, mt, 0, 0);
1843 	MA_STATE(newmas, mt, 0, 0);
1844 
1845 	for (i = 0; i <= nr_entries; i++)
1846 		mtree_store_range(mt, i*10, i*10 + 5,
1847 				  xa_mk_value(i), GFP_KERNEL);
1848 
1849 	mt_set_non_kernel(99999);
1850 	mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE);
1851 	newmas.tree = &newmt;
1852 	mas_reset(&newmas);
1853 	mas_reset(&mas);
1854 	mas_lock(&newmas);
1855 	mas.index = 0;
1856 	mas.last = 0;
1857 	if (mas_expected_entries(&newmas, nr_entries)) {
1858 		pr_err("OOM!");
1859 		BUG_ON(1);
1860 	}
1861 	rcu_read_lock();
1862 	mas_for_each(&mas, val, ULONG_MAX) {
1863 		newmas.index = mas.index;
1864 		newmas.last = mas.last;
1865 		mas_store(&newmas, val);
1866 	}
1867 	rcu_read_unlock();
1868 	mas_destroy(&newmas);
1869 	mas_unlock(&newmas);
1870 	mt_validate(&newmt);
1871 	mt_set_non_kernel(0);
1872 	mtree_destroy(&newmt);
1873 }
1874 
1875 static noinline void __init check_iteration(struct maple_tree *mt)
1876 {
1877 	int i, nr_entries = 125;
1878 	void *val;
1879 	MA_STATE(mas, mt, 0, 0);
1880 
1881 	for (i = 0; i <= nr_entries; i++)
1882 		mtree_store_range(mt, i * 10, i * 10 + 9,
1883 				  xa_mk_value(i), GFP_KERNEL);
1884 
1885 	mt_set_non_kernel(99999);
1886 
1887 	i = 0;
1888 	mas_lock(&mas);
1889 	mas_for_each(&mas, val, 925) {
1890 		MT_BUG_ON(mt, mas.index != i * 10);
1891 		MT_BUG_ON(mt, mas.last != i * 10 + 9);
1892 		/* Overwrite end of entry 92 */
1893 		if (i == 92) {
1894 			mas.index = 925;
1895 			mas.last = 929;
1896 			mas_store(&mas, val);
1897 		}
1898 		i++;
1899 	}
1900 	/* Ensure mas_find() gets the next value */
1901 	val = mas_find(&mas, ULONG_MAX);
1902 	MT_BUG_ON(mt, val != xa_mk_value(i));
1903 
1904 	mas_set(&mas, 0);
1905 	i = 0;
1906 	mas_for_each(&mas, val, 785) {
1907 		MT_BUG_ON(mt, mas.index != i * 10);
1908 		MT_BUG_ON(mt, mas.last != i * 10 + 9);
1909 		/* Overwrite start of entry 78 */
1910 		if (i == 78) {
1911 			mas.index = 780;
1912 			mas.last = 785;
1913 			mas_store(&mas, val);
1914 		} else {
1915 			i++;
1916 		}
1917 	}
1918 	val = mas_find(&mas, ULONG_MAX);
1919 	MT_BUG_ON(mt, val != xa_mk_value(i));
1920 
1921 	mas_set(&mas, 0);
1922 	i = 0;
1923 	mas_for_each(&mas, val, 765) {
1924 		MT_BUG_ON(mt, mas.index != i * 10);
1925 		MT_BUG_ON(mt, mas.last != i * 10 + 9);
1926 		/* Overwrite end of entry 76 and advance to the end */
1927 		if (i == 76) {
1928 			mas.index = 760;
1929 			mas.last = 765;
1930 			mas_store(&mas, val);
1931 		}
1932 		i++;
1933 	}
1934 	/* Make sure the next find returns the one after 765, 766-769 */
1935 	val = mas_find(&mas, ULONG_MAX);
1936 	MT_BUG_ON(mt, val != xa_mk_value(76));
1937 	mas_unlock(&mas);
1938 	mas_destroy(&mas);
1939 	mt_set_non_kernel(0);
1940 }
1941 
1942 static noinline void __init check_mas_store_gfp(struct maple_tree *mt)
1943 {
1944 
1945 	struct maple_tree newmt;
1946 	int i, nr_entries = 135;
1947 	void *val;
1948 	MA_STATE(mas, mt, 0, 0);
1949 	MA_STATE(newmas, mt, 0, 0);
1950 
1951 	for (i = 0; i <= nr_entries; i++)
1952 		mtree_store_range(mt, i*10, i*10 + 5,
1953 				  xa_mk_value(i), GFP_KERNEL);
1954 
1955 	mt_set_non_kernel(99999);
1956 	mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE);
1957 	newmas.tree = &newmt;
1958 	rcu_read_lock();
1959 	mas_lock(&newmas);
1960 	mas_reset(&newmas);
1961 	mas_set(&mas, 0);
1962 	mas_for_each(&mas, val, ULONG_MAX) {
1963 		newmas.index = mas.index;
1964 		newmas.last = mas.last;
1965 		mas_store_gfp(&newmas, val, GFP_KERNEL);
1966 	}
1967 	mas_unlock(&newmas);
1968 	rcu_read_unlock();
1969 	mt_validate(&newmt);
1970 	mt_set_non_kernel(0);
1971 	mtree_destroy(&newmt);
1972 }
1973 
1974 #if defined(BENCH_FORK)
1975 static noinline void __init bench_forking(struct maple_tree *mt)
1976 {
1977 
1978 	struct maple_tree newmt;
1979 	int i, nr_entries = 134, nr_fork = 80000;
1980 	void *val;
1981 	MA_STATE(mas, mt, 0, 0);
1982 	MA_STATE(newmas, mt, 0, 0);
1983 
1984 	for (i = 0; i <= nr_entries; i++)
1985 		mtree_store_range(mt, i*10, i*10 + 5,
1986 				  xa_mk_value(i), GFP_KERNEL);
1987 
1988 	for (i = 0; i < nr_fork; i++) {
1989 		mt_set_non_kernel(99999);
1990 		mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE);
1991 		newmas.tree = &newmt;
1992 		mas_reset(&newmas);
1993 		mas_reset(&mas);
1994 		mas.index = 0;
1995 		mas.last = 0;
1996 		rcu_read_lock();
1997 		mas_lock(&newmas);
1998 		if (mas_expected_entries(&newmas, nr_entries)) {
1999 			printk("OOM!");
2000 			BUG_ON(1);
2001 		}
2002 		mas_for_each(&mas, val, ULONG_MAX) {
2003 			newmas.index = mas.index;
2004 			newmas.last = mas.last;
2005 			mas_store(&newmas, val);
2006 		}
2007 		mas_destroy(&newmas);
2008 		mas_unlock(&newmas);
2009 		rcu_read_unlock();
2010 		mt_validate(&newmt);
2011 		mt_set_non_kernel(0);
2012 		mtree_destroy(&newmt);
2013 	}
2014 }
2015 #endif
2016 
2017 static noinline void __init next_prev_test(struct maple_tree *mt)
2018 {
2019 	int i, nr_entries;
2020 	void *val;
2021 	MA_STATE(mas, mt, 0, 0);
2022 	struct maple_enode *mn;
2023 	static const unsigned long *level2;
2024 	static const unsigned long level2_64[] = { 707, 1000, 710, 715, 720,
2025 						   725};
2026 	static const unsigned long level2_32[] = { 1747, 2000, 1750, 1755,
2027 						   1760, 1765};
2028 	unsigned long last_index;
2029 
2030 	if (MAPLE_32BIT) {
2031 		nr_entries = 500;
2032 		level2 = level2_32;
2033 		last_index = 0x138e;
2034 	} else {
2035 		nr_entries = 200;
2036 		level2 = level2_64;
2037 		last_index = 0x7d6;
2038 	}
2039 
2040 	for (i = 0; i <= nr_entries; i++)
2041 		mtree_store_range(mt, i*10, i*10 + 5,
2042 				  xa_mk_value(i), GFP_KERNEL);
2043 
2044 	mas_lock(&mas);
2045 	for (i = 0; i <= nr_entries / 2; i++) {
2046 		mas_next(&mas, 1000);
2047 		if (mas_is_none(&mas))
2048 			break;
2049 
2050 	}
2051 	mas_reset(&mas);
2052 	mas_set(&mas, 0);
2053 	i = 0;
2054 	mas_for_each(&mas, val, 1000) {
2055 		i++;
2056 	}
2057 
2058 	mas_reset(&mas);
2059 	mas_set(&mas, 0);
2060 	i = 0;
2061 	mas_for_each(&mas, val, 1000) {
2062 		mas_pause(&mas);
2063 		i++;
2064 	}
2065 
2066 	/*
2067 	 * 680 - 685 = 0x61a00001930c
2068 	 * 686 - 689 = NULL;
2069 	 * 690 - 695 = 0x61a00001930c
2070 	 * Check simple next/prev
2071 	 */
2072 	mas_set(&mas, 686);
2073 	val = mas_walk(&mas);
2074 	MT_BUG_ON(mt, val != NULL);
2075 
2076 	val = mas_next(&mas, 1000);
2077 	MT_BUG_ON(mt, val != xa_mk_value(690 / 10));
2078 	MT_BUG_ON(mt, mas.index != 690);
2079 	MT_BUG_ON(mt, mas.last != 695);
2080 
2081 	val = mas_prev(&mas, 0);
2082 	MT_BUG_ON(mt, val != xa_mk_value(680 / 10));
2083 	MT_BUG_ON(mt, mas.index != 680);
2084 	MT_BUG_ON(mt, mas.last != 685);
2085 
2086 	val = mas_next(&mas, 1000);
2087 	MT_BUG_ON(mt, val != xa_mk_value(690 / 10));
2088 	MT_BUG_ON(mt, mas.index != 690);
2089 	MT_BUG_ON(mt, mas.last != 695);
2090 
2091 	val = mas_next(&mas, 1000);
2092 	MT_BUG_ON(mt, val != xa_mk_value(700 / 10));
2093 	MT_BUG_ON(mt, mas.index != 700);
2094 	MT_BUG_ON(mt, mas.last != 705);
2095 
2096 	/* Check across node boundaries of the tree */
2097 	mas_set(&mas, 70);
2098 	val = mas_walk(&mas);
2099 	MT_BUG_ON(mt, val != xa_mk_value(70 / 10));
2100 	MT_BUG_ON(mt, mas.index != 70);
2101 	MT_BUG_ON(mt, mas.last != 75);
2102 
2103 	val = mas_next(&mas, 1000);
2104 	MT_BUG_ON(mt, val != xa_mk_value(80 / 10));
2105 	MT_BUG_ON(mt, mas.index != 80);
2106 	MT_BUG_ON(mt, mas.last != 85);
2107 
2108 	val = mas_prev(&mas, 70);
2109 	MT_BUG_ON(mt, val != xa_mk_value(70 / 10));
2110 	MT_BUG_ON(mt, mas.index != 70);
2111 	MT_BUG_ON(mt, mas.last != 75);
2112 
2113 	/* Check across two levels of the tree */
2114 	mas_reset(&mas);
2115 	mas_set(&mas, level2[0]);
2116 	val = mas_walk(&mas);
2117 	MT_BUG_ON(mt, val != NULL);
2118 	val = mas_next(&mas, level2[1]);
2119 	MT_BUG_ON(mt, val != xa_mk_value(level2[2] / 10));
2120 	MT_BUG_ON(mt, mas.index != level2[2]);
2121 	MT_BUG_ON(mt, mas.last != level2[3]);
2122 	mn = mas.node;
2123 
2124 	val = mas_next(&mas, level2[1]);
2125 	MT_BUG_ON(mt, val != xa_mk_value(level2[4] / 10));
2126 	MT_BUG_ON(mt, mas.index != level2[4]);
2127 	MT_BUG_ON(mt, mas.last != level2[5]);
2128 	MT_BUG_ON(mt, mn == mas.node);
2129 
2130 	val = mas_prev(&mas, 0);
2131 	MT_BUG_ON(mt, val != xa_mk_value(level2[2] / 10));
2132 	MT_BUG_ON(mt, mas.index != level2[2]);
2133 	MT_BUG_ON(mt, mas.last != level2[3]);
2134 
2135 	/* Check running off the end and back on */
2136 	mas_set(&mas, nr_entries * 10);
2137 	val = mas_walk(&mas);
2138 	MT_BUG_ON(mt, val != xa_mk_value(nr_entries));
2139 	MT_BUG_ON(mt, mas.index != (nr_entries * 10));
2140 	MT_BUG_ON(mt, mas.last != (nr_entries * 10 + 5));
2141 
2142 	val = mas_next(&mas, ULONG_MAX);
2143 	MT_BUG_ON(mt, val != NULL);
2144 	MT_BUG_ON(mt, mas.index != last_index);
2145 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
2146 
2147 	val = mas_prev(&mas, 0);
2148 	MT_BUG_ON(mt, val != xa_mk_value(nr_entries));
2149 	MT_BUG_ON(mt, mas.index != (nr_entries * 10));
2150 	MT_BUG_ON(mt, mas.last != (nr_entries * 10 + 5));
2151 
2152 	/* Check running off the start and back on */
2153 	mas_reset(&mas);
2154 	mas_set(&mas, 10);
2155 	val = mas_walk(&mas);
2156 	MT_BUG_ON(mt, val != xa_mk_value(1));
2157 	MT_BUG_ON(mt, mas.index != 10);
2158 	MT_BUG_ON(mt, mas.last != 15);
2159 
2160 	val = mas_prev(&mas, 0);
2161 	MT_BUG_ON(mt, val != xa_mk_value(0));
2162 	MT_BUG_ON(mt, mas.index != 0);
2163 	MT_BUG_ON(mt, mas.last != 5);
2164 
2165 	val = mas_prev(&mas, 0);
2166 	MT_BUG_ON(mt, val != NULL);
2167 	MT_BUG_ON(mt, mas.index != 0);
2168 	MT_BUG_ON(mt, mas.last != 5);
2169 	MT_BUG_ON(mt, mas.node != MAS_UNDERFLOW);
2170 
2171 	mas.index = 0;
2172 	mas.last = 5;
2173 	mas_store(&mas, NULL);
2174 	mas_reset(&mas);
2175 	mas_set(&mas, 10);
2176 	mas_walk(&mas);
2177 
2178 	val = mas_prev(&mas, 0);
2179 	MT_BUG_ON(mt, val != NULL);
2180 	MT_BUG_ON(mt, mas.index != 0);
2181 	MT_BUG_ON(mt, mas.last != 9);
2182 	mas_unlock(&mas);
2183 
2184 	mtree_destroy(mt);
2185 
2186 	mt_init(mt);
2187 	mtree_store_range(mt, 0, 0, xa_mk_value(0), GFP_KERNEL);
2188 	mtree_store_range(mt, 5, 5, xa_mk_value(5), GFP_KERNEL);
2189 	rcu_read_lock();
2190 	mas_set(&mas, 5);
2191 	val = mas_prev(&mas, 4);
2192 	MT_BUG_ON(mt, val != NULL);
2193 	rcu_read_unlock();
2194 }
2195 
2196 
2197 
2198 /* Test spanning writes that require balancing right sibling or right cousin */
2199 static noinline void __init check_spanning_relatives(struct maple_tree *mt)
2200 {
2201 
2202 	unsigned long i, nr_entries = 1000;
2203 
2204 	for (i = 0; i <= nr_entries; i++)
2205 		mtree_store_range(mt, i*10, i*10 + 5,
2206 				  xa_mk_value(i), GFP_KERNEL);
2207 
2208 
2209 	mtree_store_range(mt, 9365, 9955, NULL, GFP_KERNEL);
2210 }
2211 
2212 static noinline void __init check_fuzzer(struct maple_tree *mt)
2213 {
2214 	/*
2215 	 * 1. Causes a spanning rebalance of a single root node.
2216 	 * Fixed by setting the correct limit in mast_cp_to_nodes() when the
2217 	 * entire right side is consumed.
2218 	 */
2219 	mtree_test_insert(mt, 88, (void *)0xb1);
2220 	mtree_test_insert(mt, 84, (void *)0xa9);
2221 	mtree_test_insert(mt, 2,  (void *)0x5);
2222 	mtree_test_insert(mt, 4,  (void *)0x9);
2223 	mtree_test_insert(mt, 14, (void *)0x1d);
2224 	mtree_test_insert(mt, 7,  (void *)0xf);
2225 	mtree_test_insert(mt, 12, (void *)0x19);
2226 	mtree_test_insert(mt, 18, (void *)0x25);
2227 	mtree_test_store_range(mt, 8, 18, (void *)0x11);
2228 	mtree_destroy(mt);
2229 
2230 
2231 	/*
2232 	 * 2. Cause a spanning rebalance of two nodes in root.
2233 	 * Fixed by setting mast->r->max correctly.
2234 	 */
2235 	mt_init_flags(mt, 0);
2236 	mtree_test_store(mt, 87, (void *)0xaf);
2237 	mtree_test_store(mt, 0, (void *)0x1);
2238 	mtree_test_load(mt, 4);
2239 	mtree_test_insert(mt, 4, (void *)0x9);
2240 	mtree_test_store(mt, 8, (void *)0x11);
2241 	mtree_test_store(mt, 44, (void *)0x59);
2242 	mtree_test_store(mt, 68, (void *)0x89);
2243 	mtree_test_store(mt, 2, (void *)0x5);
2244 	mtree_test_insert(mt, 43, (void *)0x57);
2245 	mtree_test_insert(mt, 24, (void *)0x31);
2246 	mtree_test_insert(mt, 844, (void *)0x699);
2247 	mtree_test_store(mt, 84, (void *)0xa9);
2248 	mtree_test_store(mt, 4, (void *)0x9);
2249 	mtree_test_erase(mt, 4);
2250 	mtree_test_load(mt, 5);
2251 	mtree_test_erase(mt, 0);
2252 	mtree_destroy(mt);
2253 
2254 	/*
2255 	 * 3. Cause a node overflow on copy
2256 	 * Fixed by using the correct check for node size in mas_wr_modify()
2257 	 * Also discovered issue with metadata setting.
2258 	 */
2259 	mt_init_flags(mt, 0);
2260 	mtree_test_store_range(mt, 0, ULONG_MAX, (void *)0x1);
2261 	mtree_test_store(mt, 4, (void *)0x9);
2262 	mtree_test_erase(mt, 5);
2263 	mtree_test_erase(mt, 0);
2264 	mtree_test_erase(mt, 4);
2265 	mtree_test_store(mt, 5, (void *)0xb);
2266 	mtree_test_erase(mt, 5);
2267 	mtree_test_store(mt, 5, (void *)0xb);
2268 	mtree_test_erase(mt, 5);
2269 	mtree_test_erase(mt, 4);
2270 	mtree_test_store(mt, 4, (void *)0x9);
2271 	mtree_test_store(mt, 444, (void *)0x379);
2272 	mtree_test_store(mt, 0, (void *)0x1);
2273 	mtree_test_load(mt, 0);
2274 	mtree_test_store(mt, 5, (void *)0xb);
2275 	mtree_test_erase(mt, 0);
2276 	mtree_destroy(mt);
2277 
2278 	/*
2279 	 * 4. spanning store failure due to writing incorrect pivot value at
2280 	 * last slot.
2281 	 * Fixed by setting mast->r->max correctly in mast_cp_to_nodes()
2282 	 *
2283 	 */
2284 	mt_init_flags(mt, 0);
2285 	mtree_test_insert(mt, 261, (void *)0x20b);
2286 	mtree_test_store(mt, 516, (void *)0x409);
2287 	mtree_test_store(mt, 6, (void *)0xd);
2288 	mtree_test_insert(mt, 5, (void *)0xb);
2289 	mtree_test_insert(mt, 1256, (void *)0x9d1);
2290 	mtree_test_store(mt, 4, (void *)0x9);
2291 	mtree_test_erase(mt, 1);
2292 	mtree_test_store(mt, 56, (void *)0x71);
2293 	mtree_test_insert(mt, 1, (void *)0x3);
2294 	mtree_test_store(mt, 24, (void *)0x31);
2295 	mtree_test_erase(mt, 1);
2296 	mtree_test_insert(mt, 2263, (void *)0x11af);
2297 	mtree_test_insert(mt, 446, (void *)0x37d);
2298 	mtree_test_store_range(mt, 6, 45, (void *)0xd);
2299 	mtree_test_store_range(mt, 3, 446, (void *)0x7);
2300 	mtree_destroy(mt);
2301 
2302 	/*
2303 	 * 5. mas_wr_extend_null() may overflow slots.
2304 	 * Fix by checking against wr_mas->node_end.
2305 	 */
2306 	mt_init_flags(mt, 0);
2307 	mtree_test_store(mt, 48, (void *)0x61);
2308 	mtree_test_store(mt, 3, (void *)0x7);
2309 	mtree_test_load(mt, 0);
2310 	mtree_test_store(mt, 88, (void *)0xb1);
2311 	mtree_test_store(mt, 81, (void *)0xa3);
2312 	mtree_test_insert(mt, 0, (void *)0x1);
2313 	mtree_test_insert(mt, 8, (void *)0x11);
2314 	mtree_test_insert(mt, 4, (void *)0x9);
2315 	mtree_test_insert(mt, 2480, (void *)0x1361);
2316 	mtree_test_insert(mt, ULONG_MAX,
2317 			  (void *)0xffffffffffffffff);
2318 	mtree_test_erase(mt, ULONG_MAX);
2319 	mtree_destroy(mt);
2320 
2321 	/*
2322 	 * 6.  When reusing a node with an implied pivot and the node is
2323 	 * shrinking, old data would be left in the implied slot
2324 	 * Fixed by checking the last pivot for the mas->max and clear
2325 	 * accordingly.  This only affected the left-most node as that node is
2326 	 * the only one allowed to end in NULL.
2327 	 */
2328 	mt_init_flags(mt, 0);
2329 	mtree_test_erase(mt, 3);
2330 	mtree_test_insert(mt, 22, (void *)0x2d);
2331 	mtree_test_insert(mt, 15, (void *)0x1f);
2332 	mtree_test_load(mt, 2);
2333 	mtree_test_insert(mt, 1, (void *)0x3);
2334 	mtree_test_insert(mt, 1, (void *)0x3);
2335 	mtree_test_insert(mt, 5, (void *)0xb);
2336 	mtree_test_erase(mt, 1);
2337 	mtree_test_insert(mt, 1, (void *)0x3);
2338 	mtree_test_insert(mt, 4, (void *)0x9);
2339 	mtree_test_insert(mt, 1, (void *)0x3);
2340 	mtree_test_erase(mt, 1);
2341 	mtree_test_insert(mt, 2, (void *)0x5);
2342 	mtree_test_insert(mt, 1, (void *)0x3);
2343 	mtree_test_erase(mt, 3);
2344 	mtree_test_insert(mt, 22, (void *)0x2d);
2345 	mtree_test_insert(mt, 15, (void *)0x1f);
2346 	mtree_test_insert(mt, 2, (void *)0x5);
2347 	mtree_test_insert(mt, 1, (void *)0x3);
2348 	mtree_test_insert(mt, 8, (void *)0x11);
2349 	mtree_test_load(mt, 2);
2350 	mtree_test_insert(mt, 1, (void *)0x3);
2351 	mtree_test_insert(mt, 1, (void *)0x3);
2352 	mtree_test_store(mt, 1, (void *)0x3);
2353 	mtree_test_insert(mt, 5, (void *)0xb);
2354 	mtree_test_erase(mt, 1);
2355 	mtree_test_insert(mt, 1, (void *)0x3);
2356 	mtree_test_insert(mt, 4, (void *)0x9);
2357 	mtree_test_insert(mt, 1, (void *)0x3);
2358 	mtree_test_erase(mt, 1);
2359 	mtree_test_insert(mt, 2, (void *)0x5);
2360 	mtree_test_insert(mt, 1, (void *)0x3);
2361 	mtree_test_erase(mt, 3);
2362 	mtree_test_insert(mt, 22, (void *)0x2d);
2363 	mtree_test_insert(mt, 15, (void *)0x1f);
2364 	mtree_test_insert(mt, 2, (void *)0x5);
2365 	mtree_test_insert(mt, 1, (void *)0x3);
2366 	mtree_test_insert(mt, 8, (void *)0x11);
2367 	mtree_test_insert(mt, 12, (void *)0x19);
2368 	mtree_test_erase(mt, 1);
2369 	mtree_test_store_range(mt, 4, 62, (void *)0x9);
2370 	mtree_test_erase(mt, 62);
2371 	mtree_test_store_range(mt, 1, 0, (void *)0x3);
2372 	mtree_test_insert(mt, 11, (void *)0x17);
2373 	mtree_test_insert(mt, 3, (void *)0x7);
2374 	mtree_test_insert(mt, 3, (void *)0x7);
2375 	mtree_test_store(mt, 62, (void *)0x7d);
2376 	mtree_test_erase(mt, 62);
2377 	mtree_test_store_range(mt, 1, 15, (void *)0x3);
2378 	mtree_test_erase(mt, 1);
2379 	mtree_test_insert(mt, 22, (void *)0x2d);
2380 	mtree_test_insert(mt, 12, (void *)0x19);
2381 	mtree_test_erase(mt, 1);
2382 	mtree_test_insert(mt, 3, (void *)0x7);
2383 	mtree_test_store(mt, 62, (void *)0x7d);
2384 	mtree_test_erase(mt, 62);
2385 	mtree_test_insert(mt, 122, (void *)0xf5);
2386 	mtree_test_store(mt, 3, (void *)0x7);
2387 	mtree_test_insert(mt, 0, (void *)0x1);
2388 	mtree_test_store_range(mt, 0, 1, (void *)0x1);
2389 	mtree_test_insert(mt, 85, (void *)0xab);
2390 	mtree_test_insert(mt, 72, (void *)0x91);
2391 	mtree_test_insert(mt, 81, (void *)0xa3);
2392 	mtree_test_insert(mt, 726, (void *)0x5ad);
2393 	mtree_test_insert(mt, 0, (void *)0x1);
2394 	mtree_test_insert(mt, 1, (void *)0x3);
2395 	mtree_test_store(mt, 51, (void *)0x67);
2396 	mtree_test_insert(mt, 611, (void *)0x4c7);
2397 	mtree_test_insert(mt, 485, (void *)0x3cb);
2398 	mtree_test_insert(mt, 1, (void *)0x3);
2399 	mtree_test_erase(mt, 1);
2400 	mtree_test_insert(mt, 0, (void *)0x1);
2401 	mtree_test_insert(mt, 1, (void *)0x3);
2402 	mtree_test_insert_range(mt, 26, 1, (void *)0x35);
2403 	mtree_test_load(mt, 1);
2404 	mtree_test_store_range(mt, 1, 22, (void *)0x3);
2405 	mtree_test_insert(mt, 1, (void *)0x3);
2406 	mtree_test_erase(mt, 1);
2407 	mtree_test_load(mt, 53);
2408 	mtree_test_load(mt, 1);
2409 	mtree_test_store_range(mt, 1, 1, (void *)0x3);
2410 	mtree_test_insert(mt, 222, (void *)0x1bd);
2411 	mtree_test_insert(mt, 485, (void *)0x3cb);
2412 	mtree_test_insert(mt, 1, (void *)0x3);
2413 	mtree_test_erase(mt, 1);
2414 	mtree_test_load(mt, 0);
2415 	mtree_test_insert(mt, 21, (void *)0x2b);
2416 	mtree_test_insert(mt, 3, (void *)0x7);
2417 	mtree_test_store(mt, 621, (void *)0x4db);
2418 	mtree_test_insert(mt, 0, (void *)0x1);
2419 	mtree_test_erase(mt, 5);
2420 	mtree_test_insert(mt, 1, (void *)0x3);
2421 	mtree_test_store(mt, 62, (void *)0x7d);
2422 	mtree_test_erase(mt, 62);
2423 	mtree_test_store_range(mt, 1, 0, (void *)0x3);
2424 	mtree_test_insert(mt, 22, (void *)0x2d);
2425 	mtree_test_insert(mt, 12, (void *)0x19);
2426 	mtree_test_erase(mt, 1);
2427 	mtree_test_insert(mt, 1, (void *)0x3);
2428 	mtree_test_store_range(mt, 4, 62, (void *)0x9);
2429 	mtree_test_erase(mt, 62);
2430 	mtree_test_erase(mt, 1);
2431 	mtree_test_load(mt, 1);
2432 	mtree_test_store_range(mt, 1, 22, (void *)0x3);
2433 	mtree_test_insert(mt, 1, (void *)0x3);
2434 	mtree_test_erase(mt, 1);
2435 	mtree_test_load(mt, 53);
2436 	mtree_test_load(mt, 1);
2437 	mtree_test_store_range(mt, 1, 1, (void *)0x3);
2438 	mtree_test_insert(mt, 222, (void *)0x1bd);
2439 	mtree_test_insert(mt, 485, (void *)0x3cb);
2440 	mtree_test_insert(mt, 1, (void *)0x3);
2441 	mtree_test_erase(mt, 1);
2442 	mtree_test_insert(mt, 1, (void *)0x3);
2443 	mtree_test_load(mt, 0);
2444 	mtree_test_load(mt, 0);
2445 	mtree_destroy(mt);
2446 
2447 	/*
2448 	 * 7. Previous fix was incomplete, fix mas_resuse_node() clearing of old
2449 	 * data by overwriting it first - that way metadata is of no concern.
2450 	 */
2451 	mt_init_flags(mt, 0);
2452 	mtree_test_load(mt, 1);
2453 	mtree_test_insert(mt, 102, (void *)0xcd);
2454 	mtree_test_erase(mt, 2);
2455 	mtree_test_erase(mt, 0);
2456 	mtree_test_load(mt, 0);
2457 	mtree_test_insert(mt, 4, (void *)0x9);
2458 	mtree_test_insert(mt, 2, (void *)0x5);
2459 	mtree_test_insert(mt, 110, (void *)0xdd);
2460 	mtree_test_insert(mt, 1, (void *)0x3);
2461 	mtree_test_insert_range(mt, 5, 0, (void *)0xb);
2462 	mtree_test_erase(mt, 2);
2463 	mtree_test_store(mt, 0, (void *)0x1);
2464 	mtree_test_store(mt, 112, (void *)0xe1);
2465 	mtree_test_insert(mt, 21, (void *)0x2b);
2466 	mtree_test_store(mt, 1, (void *)0x3);
2467 	mtree_test_insert_range(mt, 110, 2, (void *)0xdd);
2468 	mtree_test_store(mt, 2, (void *)0x5);
2469 	mtree_test_load(mt, 22);
2470 	mtree_test_erase(mt, 2);
2471 	mtree_test_store(mt, 210, (void *)0x1a5);
2472 	mtree_test_store_range(mt, 0, 2, (void *)0x1);
2473 	mtree_test_store(mt, 2, (void *)0x5);
2474 	mtree_test_erase(mt, 2);
2475 	mtree_test_erase(mt, 22);
2476 	mtree_test_erase(mt, 1);
2477 	mtree_test_erase(mt, 2);
2478 	mtree_test_store(mt, 0, (void *)0x1);
2479 	mtree_test_load(mt, 112);
2480 	mtree_test_insert(mt, 2, (void *)0x5);
2481 	mtree_test_erase(mt, 2);
2482 	mtree_test_store(mt, 1, (void *)0x3);
2483 	mtree_test_insert_range(mt, 1, 2, (void *)0x3);
2484 	mtree_test_erase(mt, 0);
2485 	mtree_test_erase(mt, 2);
2486 	mtree_test_store(mt, 2, (void *)0x5);
2487 	mtree_test_erase(mt, 0);
2488 	mtree_test_erase(mt, 2);
2489 	mtree_test_store(mt, 0, (void *)0x1);
2490 	mtree_test_store(mt, 0, (void *)0x1);
2491 	mtree_test_erase(mt, 2);
2492 	mtree_test_store(mt, 2, (void *)0x5);
2493 	mtree_test_erase(mt, 2);
2494 	mtree_test_insert(mt, 2, (void *)0x5);
2495 	mtree_test_insert_range(mt, 1, 2, (void *)0x3);
2496 	mtree_test_erase(mt, 0);
2497 	mtree_test_erase(mt, 2);
2498 	mtree_test_store(mt, 0, (void *)0x1);
2499 	mtree_test_load(mt, 112);
2500 	mtree_test_store_range(mt, 110, 12, (void *)0xdd);
2501 	mtree_test_store(mt, 2, (void *)0x5);
2502 	mtree_test_load(mt, 110);
2503 	mtree_test_insert_range(mt, 4, 71, (void *)0x9);
2504 	mtree_test_load(mt, 2);
2505 	mtree_test_store(mt, 2, (void *)0x5);
2506 	mtree_test_insert_range(mt, 11, 22, (void *)0x17);
2507 	mtree_test_erase(mt, 12);
2508 	mtree_test_store(mt, 2, (void *)0x5);
2509 	mtree_test_load(mt, 22);
2510 	mtree_destroy(mt);
2511 
2512 
2513 	/*
2514 	 * 8.  When rebalancing or spanning_rebalance(), the max of the new node
2515 	 * may be set incorrectly to the final pivot and not the right max.
2516 	 * Fix by setting the left max to orig right max if the entire node is
2517 	 * consumed.
2518 	 */
2519 	mt_init_flags(mt, 0);
2520 	mtree_test_store(mt, 6, (void *)0xd);
2521 	mtree_test_store(mt, 67, (void *)0x87);
2522 	mtree_test_insert(mt, 15, (void *)0x1f);
2523 	mtree_test_insert(mt, 6716, (void *)0x3479);
2524 	mtree_test_store(mt, 61, (void *)0x7b);
2525 	mtree_test_insert(mt, 13, (void *)0x1b);
2526 	mtree_test_store(mt, 8, (void *)0x11);
2527 	mtree_test_insert(mt, 1, (void *)0x3);
2528 	mtree_test_load(mt, 0);
2529 	mtree_test_erase(mt, 67167);
2530 	mtree_test_insert_range(mt, 6, 7167, (void *)0xd);
2531 	mtree_test_insert(mt, 6, (void *)0xd);
2532 	mtree_test_erase(mt, 67);
2533 	mtree_test_insert(mt, 1, (void *)0x3);
2534 	mtree_test_erase(mt, 667167);
2535 	mtree_test_insert(mt, 6, (void *)0xd);
2536 	mtree_test_store(mt, 67, (void *)0x87);
2537 	mtree_test_insert(mt, 5, (void *)0xb);
2538 	mtree_test_erase(mt, 1);
2539 	mtree_test_insert(mt, 6, (void *)0xd);
2540 	mtree_test_erase(mt, 67);
2541 	mtree_test_insert(mt, 15, (void *)0x1f);
2542 	mtree_test_insert(mt, 67167, (void *)0x20cbf);
2543 	mtree_test_insert(mt, 1, (void *)0x3);
2544 	mtree_test_load(mt, 7);
2545 	mtree_test_insert(mt, 16, (void *)0x21);
2546 	mtree_test_insert(mt, 36, (void *)0x49);
2547 	mtree_test_store(mt, 67, (void *)0x87);
2548 	mtree_test_store(mt, 6, (void *)0xd);
2549 	mtree_test_insert(mt, 367, (void *)0x2df);
2550 	mtree_test_insert(mt, 115, (void *)0xe7);
2551 	mtree_test_store(mt, 0, (void *)0x1);
2552 	mtree_test_store_range(mt, 1, 3, (void *)0x3);
2553 	mtree_test_store(mt, 1, (void *)0x3);
2554 	mtree_test_erase(mt, 67167);
2555 	mtree_test_insert_range(mt, 6, 47, (void *)0xd);
2556 	mtree_test_store(mt, 1, (void *)0x3);
2557 	mtree_test_insert_range(mt, 1, 67, (void *)0x3);
2558 	mtree_test_load(mt, 67);
2559 	mtree_test_insert(mt, 1, (void *)0x3);
2560 	mtree_test_erase(mt, 67167);
2561 	mtree_destroy(mt);
2562 
2563 	/*
2564 	 * 9. spanning store to the end of data caused an invalid metadata
2565 	 * length which resulted in a crash eventually.
2566 	 * Fix by checking if there is a value in pivot before incrementing the
2567 	 * metadata end in mab_mas_cp().  To ensure this doesn't happen again,
2568 	 * abstract the two locations this happens into a function called
2569 	 * mas_leaf_set_meta().
2570 	 */
2571 	mt_init_flags(mt, 0);
2572 	mtree_test_insert(mt, 21, (void *)0x2b);
2573 	mtree_test_insert(mt, 12, (void *)0x19);
2574 	mtree_test_insert(mt, 6, (void *)0xd);
2575 	mtree_test_insert(mt, 8, (void *)0x11);
2576 	mtree_test_insert(mt, 2, (void *)0x5);
2577 	mtree_test_insert(mt, 91, (void *)0xb7);
2578 	mtree_test_insert(mt, 18, (void *)0x25);
2579 	mtree_test_insert(mt, 81, (void *)0xa3);
2580 	mtree_test_store_range(mt, 0, 128, (void *)0x1);
2581 	mtree_test_store(mt, 1, (void *)0x3);
2582 	mtree_test_erase(mt, 8);
2583 	mtree_test_insert(mt, 11, (void *)0x17);
2584 	mtree_test_insert(mt, 8, (void *)0x11);
2585 	mtree_test_insert(mt, 21, (void *)0x2b);
2586 	mtree_test_insert(mt, 2, (void *)0x5);
2587 	mtree_test_insert(mt, ULONG_MAX - 10, (void *)0xffffffffffffffeb);
2588 	mtree_test_erase(mt, ULONG_MAX - 10);
2589 	mtree_test_store_range(mt, 0, 281, (void *)0x1);
2590 	mtree_test_erase(mt, 2);
2591 	mtree_test_insert(mt, 1211, (void *)0x977);
2592 	mtree_test_insert(mt, 111, (void *)0xdf);
2593 	mtree_test_insert(mt, 13, (void *)0x1b);
2594 	mtree_test_insert(mt, 211, (void *)0x1a7);
2595 	mtree_test_insert(mt, 11, (void *)0x17);
2596 	mtree_test_insert(mt, 5, (void *)0xb);
2597 	mtree_test_insert(mt, 1218, (void *)0x985);
2598 	mtree_test_insert(mt, 61, (void *)0x7b);
2599 	mtree_test_store(mt, 1, (void *)0x3);
2600 	mtree_test_insert(mt, 121, (void *)0xf3);
2601 	mtree_test_insert(mt, 8, (void *)0x11);
2602 	mtree_test_insert(mt, 21, (void *)0x2b);
2603 	mtree_test_insert(mt, 2, (void *)0x5);
2604 	mtree_test_insert(mt, ULONG_MAX - 10, (void *)0xffffffffffffffeb);
2605 	mtree_test_erase(mt, ULONG_MAX - 10);
2606 }
2607 
2608 /* duplicate the tree with a specific gap */
2609 static noinline void __init check_dup_gaps(struct maple_tree *mt,
2610 				    unsigned long nr_entries, bool zero_start,
2611 				    unsigned long gap)
2612 {
2613 	unsigned long i = 0;
2614 	struct maple_tree newmt;
2615 	int ret;
2616 	void *tmp;
2617 	MA_STATE(mas, mt, 0, 0);
2618 	MA_STATE(newmas, &newmt, 0, 0);
2619 
2620 	if (!zero_start)
2621 		i = 1;
2622 
2623 	mt_zero_nr_tallocated();
2624 	for (; i <= nr_entries; i++)
2625 		mtree_store_range(mt, i*10, (i+1)*10 - gap,
2626 				  xa_mk_value(i), GFP_KERNEL);
2627 
2628 	mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE);
2629 	mt_set_non_kernel(99999);
2630 	mas_lock(&newmas);
2631 	ret = mas_expected_entries(&newmas, nr_entries);
2632 	mt_set_non_kernel(0);
2633 	MT_BUG_ON(mt, ret != 0);
2634 
2635 	rcu_read_lock();
2636 	mas_for_each(&mas, tmp, ULONG_MAX) {
2637 		newmas.index = mas.index;
2638 		newmas.last = mas.last;
2639 		mas_store(&newmas, tmp);
2640 	}
2641 	rcu_read_unlock();
2642 	mas_destroy(&newmas);
2643 	mas_unlock(&newmas);
2644 
2645 	mtree_destroy(&newmt);
2646 }
2647 
2648 /* Duplicate many sizes of trees.  Mainly to test expected entry values */
2649 static noinline void __init check_dup(struct maple_tree *mt)
2650 {
2651 	int i;
2652 	int big_start = 100010;
2653 
2654 	/* Check with a value at zero */
2655 	for (i = 10; i < 1000; i++) {
2656 		mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
2657 		check_dup_gaps(mt, i, true, 5);
2658 		mtree_destroy(mt);
2659 		rcu_barrier();
2660 	}
2661 
2662 	cond_resched();
2663 	mt_cache_shrink();
2664 	/* Check with a value at zero, no gap */
2665 	for (i = 1000; i < 2000; i++) {
2666 		mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
2667 		check_dup_gaps(mt, i, true, 0);
2668 		mtree_destroy(mt);
2669 		rcu_barrier();
2670 	}
2671 
2672 	cond_resched();
2673 	mt_cache_shrink();
2674 	/* Check with a value at zero and unreasonably large */
2675 	for (i = big_start; i < big_start + 10; i++) {
2676 		mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
2677 		check_dup_gaps(mt, i, true, 5);
2678 		mtree_destroy(mt);
2679 		rcu_barrier();
2680 	}
2681 
2682 	cond_resched();
2683 	mt_cache_shrink();
2684 	/* Small to medium size not starting at zero*/
2685 	for (i = 200; i < 1000; i++) {
2686 		mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
2687 		check_dup_gaps(mt, i, false, 5);
2688 		mtree_destroy(mt);
2689 		rcu_barrier();
2690 	}
2691 
2692 	cond_resched();
2693 	mt_cache_shrink();
2694 	/* Unreasonably large not starting at zero*/
2695 	for (i = big_start; i < big_start + 10; i++) {
2696 		mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);
2697 		check_dup_gaps(mt, i, false, 5);
2698 		mtree_destroy(mt);
2699 		rcu_barrier();
2700 		cond_resched();
2701 		mt_cache_shrink();
2702 	}
2703 
2704 	/* Check non-allocation tree not starting at zero */
2705 	for (i = 1500; i < 3000; i++) {
2706 		mt_init_flags(mt, 0);
2707 		check_dup_gaps(mt, i, false, 5);
2708 		mtree_destroy(mt);
2709 		rcu_barrier();
2710 		cond_resched();
2711 		if (i % 2 == 0)
2712 			mt_cache_shrink();
2713 	}
2714 
2715 	mt_cache_shrink();
2716 	/* Check non-allocation tree starting at zero */
2717 	for (i = 200; i < 1000; i++) {
2718 		mt_init_flags(mt, 0);
2719 		check_dup_gaps(mt, i, true, 5);
2720 		mtree_destroy(mt);
2721 		rcu_barrier();
2722 		cond_resched();
2723 	}
2724 
2725 	mt_cache_shrink();
2726 	/* Unreasonably large */
2727 	for (i = big_start + 5; i < big_start + 10; i++) {
2728 		mt_init_flags(mt, 0);
2729 		check_dup_gaps(mt, i, true, 5);
2730 		mtree_destroy(mt);
2731 		rcu_barrier();
2732 		mt_cache_shrink();
2733 		cond_resched();
2734 	}
2735 }
2736 
2737 static noinline void __init check_bnode_min_spanning(struct maple_tree *mt)
2738 {
2739 	int i = 50;
2740 	MA_STATE(mas, mt, 0, 0);
2741 
2742 	mt_set_non_kernel(9999);
2743 	mas_lock(&mas);
2744 	do {
2745 		mas_set_range(&mas, i*10, i*10+9);
2746 		mas_store(&mas, check_bnode_min_spanning);
2747 	} while (i--);
2748 
2749 	mas_set_range(&mas, 240, 509);
2750 	mas_store(&mas, NULL);
2751 	mas_unlock(&mas);
2752 	mas_destroy(&mas);
2753 	mt_set_non_kernel(0);
2754 }
2755 
2756 static noinline void __init check_empty_area_window(struct maple_tree *mt)
2757 {
2758 	unsigned long i, nr_entries = 20;
2759 	MA_STATE(mas, mt, 0, 0);
2760 
2761 	for (i = 1; i <= nr_entries; i++)
2762 		mtree_store_range(mt, i*10, i*10 + 9,
2763 				  xa_mk_value(i), GFP_KERNEL);
2764 
2765 	/* Create another hole besides the one at 0 */
2766 	mtree_store_range(mt, 160, 169, NULL, GFP_KERNEL);
2767 
2768 	/* Check lower bounds that don't fit */
2769 	rcu_read_lock();
2770 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, 5, 90, 10) != -EBUSY);
2771 
2772 	mas_reset(&mas);
2773 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, 6, 90, 5) != -EBUSY);
2774 
2775 	/* Check lower bound that does fit */
2776 	mas_reset(&mas);
2777 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, 5, 90, 5) != 0);
2778 	MT_BUG_ON(mt, mas.index != 5);
2779 	MT_BUG_ON(mt, mas.last != 9);
2780 	rcu_read_unlock();
2781 
2782 	/* Check one gap that doesn't fit and one that does */
2783 	rcu_read_lock();
2784 	mas_reset(&mas);
2785 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, 5, 217, 9) != 0);
2786 	MT_BUG_ON(mt, mas.index != 161);
2787 	MT_BUG_ON(mt, mas.last != 169);
2788 
2789 	/* Check one gap that does fit above the min */
2790 	mas_reset(&mas);
2791 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, 100, 218, 3) != 0);
2792 	MT_BUG_ON(mt, mas.index != 216);
2793 	MT_BUG_ON(mt, mas.last != 218);
2794 
2795 	/* Check size that doesn't fit any gap */
2796 	mas_reset(&mas);
2797 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, 100, 218, 16) != -EBUSY);
2798 
2799 	/*
2800 	 * Check size that doesn't fit the lower end of the window but
2801 	 * does fit the gap
2802 	 */
2803 	mas_reset(&mas);
2804 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, 167, 200, 4) != -EBUSY);
2805 
2806 	/*
2807 	 * Check size that doesn't fit the upper end of the window but
2808 	 * does fit the gap
2809 	 */
2810 	mas_reset(&mas);
2811 	MT_BUG_ON(mt, mas_empty_area_rev(&mas, 100, 162, 4) != -EBUSY);
2812 
2813 	/* Check mas_empty_area forward */
2814 	mas_reset(&mas);
2815 	MT_BUG_ON(mt, mas_empty_area(&mas, 0, 100, 9) != 0);
2816 	MT_BUG_ON(mt, mas.index != 0);
2817 	MT_BUG_ON(mt, mas.last != 8);
2818 
2819 	mas_reset(&mas);
2820 	MT_BUG_ON(mt, mas_empty_area(&mas, 0, 100, 4) != 0);
2821 	MT_BUG_ON(mt, mas.index != 0);
2822 	MT_BUG_ON(mt, mas.last != 3);
2823 
2824 	mas_reset(&mas);
2825 	MT_BUG_ON(mt, mas_empty_area(&mas, 0, 100, 11) != -EBUSY);
2826 
2827 	mas_reset(&mas);
2828 	MT_BUG_ON(mt, mas_empty_area(&mas, 5, 100, 6) != -EBUSY);
2829 
2830 	mas_reset(&mas);
2831 	MT_BUG_ON(mt, mas_empty_area(&mas, 0, 8, 10) != -EINVAL);
2832 
2833 	mas_reset(&mas);
2834 	mas_empty_area(&mas, 100, 165, 3);
2835 
2836 	mas_reset(&mas);
2837 	MT_BUG_ON(mt, mas_empty_area(&mas, 100, 163, 6) != -EBUSY);
2838 	rcu_read_unlock();
2839 }
2840 
2841 static noinline void __init check_empty_area_fill(struct maple_tree *mt)
2842 {
2843 	const unsigned long max = 0x25D78000;
2844 	unsigned long size;
2845 	int loop, shift;
2846 	MA_STATE(mas, mt, 0, 0);
2847 
2848 	mt_set_non_kernel(99999);
2849 	for (shift = 12; shift <= 16; shift++) {
2850 		loop = 5000;
2851 		size = 1 << shift;
2852 		while (loop--) {
2853 			mas_set(&mas, 0);
2854 			mas_lock(&mas);
2855 			MT_BUG_ON(mt, mas_empty_area(&mas, 0, max, size) != 0);
2856 			MT_BUG_ON(mt, mas.last != mas.index + size - 1);
2857 			mas_store_gfp(&mas, (void *)size, GFP_KERNEL);
2858 			mas_unlock(&mas);
2859 			mas_reset(&mas);
2860 		}
2861 	}
2862 
2863 	/* No space left. */
2864 	size = 0x1000;
2865 	rcu_read_lock();
2866 	MT_BUG_ON(mt, mas_empty_area(&mas, 0, max, size) != -EBUSY);
2867 	rcu_read_unlock();
2868 
2869 	/* Fill a depth 3 node to the maximum */
2870 	for (unsigned long i = 629440511; i <= 629440800; i += 6)
2871 		mtree_store_range(mt, i, i + 5, (void *)i, GFP_KERNEL);
2872 	/* Make space in the second-last depth 4 node */
2873 	mtree_erase(mt, 631668735);
2874 	/* Make space in the last depth 4 node */
2875 	mtree_erase(mt, 629506047);
2876 	mas_reset(&mas);
2877 	/* Search from just after the gap in the second-last depth 4 */
2878 	rcu_read_lock();
2879 	MT_BUG_ON(mt, mas_empty_area(&mas, 629506048, 690000000, 0x5000) != 0);
2880 	rcu_read_unlock();
2881 	mt_set_non_kernel(0);
2882 }
2883 
2884 /*
2885  * Check MAS_START, MAS_PAUSE, active (implied), and MAS_NONE transitions.
2886  *
2887  * The table below shows the single entry tree (0-0 pointer) and normal tree
2888  * with nodes.
2889  *
2890  * Function	ENTRY	Start		Result		index & last
2891  *     ┬          ┬       ┬               ┬                ┬
2892  *     │          │       │               │                └─ the final range
2893  *     │          │       │               └─ The node value after execution
2894  *     │          │       └─ The node value before execution
2895  *     │          └─ If the entry exists or does not exists (DNE)
2896  *     └─ The function name
2897  *
2898  * Function	ENTRY	Start		Result		index & last
2899  * mas_next()
2900  *  - after last
2901  *			Single entry tree at 0-0
2902  *			------------------------
2903  *		DNE	MAS_START	MAS_NONE	1 - oo
2904  *		DNE	MAS_PAUSE	MAS_NONE	1 - oo
2905  *		DNE	MAS_ROOT	MAS_NONE	1 - oo
2906  *			when index = 0
2907  *		DNE	MAS_NONE	MAS_ROOT	0
2908  *			when index > 0
2909  *		DNE	MAS_NONE	MAS_NONE	1 - oo
2910  *
2911  *			Normal tree
2912  *			-----------
2913  *		exists	MAS_START	active		range
2914  *		DNE	MAS_START	active		set to last range
2915  *		exists	MAS_PAUSE	active		range
2916  *		DNE	MAS_PAUSE	active		set to last range
2917  *		exists	MAS_NONE	active		range
2918  *		exists	active		active		range
2919  *		DNE	active		active		set to last range
2920  *		ERANGE	active		MAS_OVERFLOW	last range
2921  *
2922  * Function	ENTRY	Start		Result		index & last
2923  * mas_prev()
2924  * - before index
2925  *			Single entry tree at 0-0
2926  *			------------------------
2927  *				if index > 0
2928  *		exists	MAS_START	MAS_ROOT	0
2929  *		exists	MAS_PAUSE	MAS_ROOT	0
2930  *		exists	MAS_NONE	MAS_ROOT	0
2931  *
2932  *				if index == 0
2933  *		DNE	MAS_START	MAS_NONE	0
2934  *		DNE	MAS_PAUSE	MAS_NONE	0
2935  *		DNE	MAS_NONE	MAS_NONE	0
2936  *		DNE	MAS_ROOT	MAS_NONE	0
2937  *
2938  *			Normal tree
2939  *			-----------
2940  *		exists	MAS_START	active		range
2941  *		DNE	MAS_START	active		set to min
2942  *		exists	MAS_PAUSE	active		range
2943  *		DNE	MAS_PAUSE	active		set to min
2944  *		exists	MAS_NONE	active		range
2945  *		DNE	MAS_NONE	MAS_NONE	set to min
2946  *		any	MAS_ROOT	MAS_NONE	0
2947  *		exists	active		active		range
2948  *		DNE	active		active		last range
2949  *		ERANGE	active		MAS_UNDERFLOW	last range
2950  *
2951  * Function	ENTRY	Start		Result		index & last
2952  * mas_find()
2953  *  - at index or next
2954  *			Single entry tree at 0-0
2955  *			------------------------
2956  *				if index >  0
2957  *		DNE	MAS_START	MAS_NONE	0
2958  *		DNE	MAS_PAUSE	MAS_NONE	0
2959  *		DNE	MAS_ROOT	MAS_NONE	0
2960  *		DNE	MAS_NONE	MAS_NONE	1
2961  *				if index ==  0
2962  *		exists	MAS_START	MAS_ROOT	0
2963  *		exists	MAS_PAUSE	MAS_ROOT	0
2964  *		exists	MAS_NONE	MAS_ROOT	0
2965  *
2966  *			Normal tree
2967  *			-----------
2968  *		exists	MAS_START	active		range
2969  *		DNE	MAS_START	active		set to max
2970  *		exists	MAS_PAUSE	active		range
2971  *		DNE	MAS_PAUSE	active		set to max
2972  *		exists	MAS_NONE	active		range (start at last)
2973  *		exists	active		active		range
2974  *		DNE	active		active		last range (max < last)
2975  *
2976  * Function	ENTRY	Start		Result		index & last
2977  * mas_find_rev()
2978  *  - at index or before
2979  *			Single entry tree at 0-0
2980  *			------------------------
2981  *				if index >  0
2982  *		exists	MAS_START	MAS_ROOT	0
2983  *		exists	MAS_PAUSE	MAS_ROOT	0
2984  *		exists	MAS_NONE	MAS_ROOT	0
2985  *				if index ==  0
2986  *		DNE	MAS_START	MAS_NONE	0
2987  *		DNE	MAS_PAUSE	MAS_NONE	0
2988  *		DNE	MAS_NONE	MAS_NONE	0
2989  *		DNE	MAS_ROOT	MAS_NONE	0
2990  *
2991  *			Normal tree
2992  *			-----------
2993  *		exists	MAS_START	active		range
2994  *		DNE	MAS_START	active		set to min
2995  *		exists	MAS_PAUSE	active		range
2996  *		DNE	MAS_PAUSE	active		set to min
2997  *		exists	MAS_NONE	active		range (start at index)
2998  *		exists	active		active		range
2999  *		DNE	active		active		last range (min > index)
3000  *
3001  * Function	ENTRY	Start		Result		index & last
3002  * mas_walk()
3003  * - Look up index
3004  *			Single entry tree at 0-0
3005  *			------------------------
3006  *				if index >  0
3007  *		DNE	MAS_START	MAS_ROOT	1 - oo
3008  *		DNE	MAS_PAUSE	MAS_ROOT	1 - oo
3009  *		DNE	MAS_NONE	MAS_ROOT	1 - oo
3010  *		DNE	MAS_ROOT	MAS_ROOT	1 - oo
3011  *				if index ==  0
3012  *		exists	MAS_START	MAS_ROOT	0
3013  *		exists	MAS_PAUSE	MAS_ROOT	0
3014  *		exists	MAS_NONE	MAS_ROOT	0
3015  *		exists	MAS_ROOT	MAS_ROOT	0
3016  *
3017  *			Normal tree
3018  *			-----------
3019  *		exists	MAS_START	active		range
3020  *		DNE	MAS_START	active		range of NULL
3021  *		exists	MAS_PAUSE	active		range
3022  *		DNE	MAS_PAUSE	active		range of NULL
3023  *		exists	MAS_NONE	active		range
3024  *		DNE	MAS_NONE	active		range of NULL
3025  *		exists	active		active		range
3026  *		DNE	active		active		range of NULL
3027  */
3028 
3029 #define mas_active(x)		(((x).node != MAS_ROOT) && \
3030 				 ((x).node != MAS_START) && \
3031 				 ((x).node != MAS_PAUSE) && \
3032 				 ((x).node != MAS_NONE))
3033 static noinline void __init check_state_handling(struct maple_tree *mt)
3034 {
3035 	MA_STATE(mas, mt, 0, 0);
3036 	void *entry, *ptr = (void *) 0x1234500;
3037 	void *ptr2 = &ptr;
3038 	void *ptr3 = &ptr2;
3039 
3040 	/* Check MAS_ROOT First */
3041 	mtree_store_range(mt, 0, 0, ptr, GFP_KERNEL);
3042 
3043 	mas_lock(&mas);
3044 	/* prev: Start -> underflow*/
3045 	entry = mas_prev(&mas, 0);
3046 	MT_BUG_ON(mt, entry != NULL);
3047 	MT_BUG_ON(mt, mas.node != MAS_UNDERFLOW);
3048 
3049 	/* prev: Start -> root */
3050 	mas_set(&mas, 10);
3051 	entry = mas_prev(&mas, 0);
3052 	MT_BUG_ON(mt, entry != ptr);
3053 	MT_BUG_ON(mt, mas.index != 0);
3054 	MT_BUG_ON(mt, mas.last != 0);
3055 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3056 
3057 	/* prev: pause -> root */
3058 	mas_set(&mas, 10);
3059 	mas_pause(&mas);
3060 	entry = mas_prev(&mas, 0);
3061 	MT_BUG_ON(mt, entry != ptr);
3062 	MT_BUG_ON(mt, mas.index != 0);
3063 	MT_BUG_ON(mt, mas.last != 0);
3064 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3065 
3066 	/* next: start -> none */
3067 	mas_set(&mas, 0);
3068 	entry = mas_next(&mas, ULONG_MAX);
3069 	MT_BUG_ON(mt, mas.index != 1);
3070 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3071 	MT_BUG_ON(mt, entry != NULL);
3072 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3073 
3074 	/* next: start -> none*/
3075 	mas_set(&mas, 10);
3076 	entry = mas_next(&mas, ULONG_MAX);
3077 	MT_BUG_ON(mt, mas.index != 1);
3078 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3079 	MT_BUG_ON(mt, entry != NULL);
3080 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3081 
3082 	/* find: start -> root */
3083 	mas_set(&mas, 0);
3084 	entry = mas_find(&mas, ULONG_MAX);
3085 	MT_BUG_ON(mt, entry != ptr);
3086 	MT_BUG_ON(mt, mas.index != 0);
3087 	MT_BUG_ON(mt, mas.last != 0);
3088 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3089 
3090 	/* find: root -> none */
3091 	entry = mas_find(&mas, ULONG_MAX);
3092 	MT_BUG_ON(mt, entry != NULL);
3093 	MT_BUG_ON(mt, mas.index != 1);
3094 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3095 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3096 
3097 	/* find: none -> none */
3098 	entry = mas_find(&mas, ULONG_MAX);
3099 	MT_BUG_ON(mt, entry != NULL);
3100 	MT_BUG_ON(mt, mas.index != 1);
3101 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3102 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3103 
3104 	/* find: start -> none */
3105 	mas_set(&mas, 10);
3106 	entry = mas_find(&mas, ULONG_MAX);
3107 	MT_BUG_ON(mt, entry != NULL);
3108 	MT_BUG_ON(mt, mas.index != 1);
3109 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3110 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3111 
3112 	/* find_rev: none -> root */
3113 	entry = mas_find_rev(&mas, 0);
3114 	MT_BUG_ON(mt, entry != ptr);
3115 	MT_BUG_ON(mt, mas.index != 0);
3116 	MT_BUG_ON(mt, mas.last != 0);
3117 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3118 
3119 	/* find_rev: start -> root */
3120 	mas_set(&mas, 0);
3121 	entry = mas_find_rev(&mas, 0);
3122 	MT_BUG_ON(mt, entry != ptr);
3123 	MT_BUG_ON(mt, mas.index != 0);
3124 	MT_BUG_ON(mt, mas.last != 0);
3125 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3126 
3127 	/* find_rev: root -> none */
3128 	entry = mas_find_rev(&mas, 0);
3129 	MT_BUG_ON(mt, entry != NULL);
3130 	MT_BUG_ON(mt, mas.index != 0);
3131 	MT_BUG_ON(mt, mas.last != 0);
3132 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3133 
3134 	/* find_rev: none -> none */
3135 	entry = mas_find_rev(&mas, 0);
3136 	MT_BUG_ON(mt, entry != NULL);
3137 	MT_BUG_ON(mt, mas.index != 0);
3138 	MT_BUG_ON(mt, mas.last != 0);
3139 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3140 
3141 	/* find_rev: start -> root */
3142 	mas_set(&mas, 10);
3143 	entry = mas_find_rev(&mas, 0);
3144 	MT_BUG_ON(mt, entry != ptr);
3145 	MT_BUG_ON(mt, mas.index != 0);
3146 	MT_BUG_ON(mt, mas.last != 0);
3147 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3148 
3149 	/* walk: start -> none */
3150 	mas_set(&mas, 10);
3151 	entry = mas_walk(&mas);
3152 	MT_BUG_ON(mt, entry != NULL);
3153 	MT_BUG_ON(mt, mas.index != 1);
3154 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3155 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3156 
3157 	/* walk: pause -> none*/
3158 	mas_set(&mas, 10);
3159 	mas_pause(&mas);
3160 	entry = mas_walk(&mas);
3161 	MT_BUG_ON(mt, entry != NULL);
3162 	MT_BUG_ON(mt, mas.index != 1);
3163 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3164 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3165 
3166 	/* walk: none -> none */
3167 	mas.index = mas.last = 10;
3168 	entry = mas_walk(&mas);
3169 	MT_BUG_ON(mt, entry != NULL);
3170 	MT_BUG_ON(mt, mas.index != 1);
3171 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3172 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3173 
3174 	/* walk: none -> none */
3175 	entry = mas_walk(&mas);
3176 	MT_BUG_ON(mt, entry != NULL);
3177 	MT_BUG_ON(mt, mas.index != 1);
3178 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3179 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3180 
3181 	/* walk: start -> root */
3182 	mas_set(&mas, 0);
3183 	entry = mas_walk(&mas);
3184 	MT_BUG_ON(mt, entry != ptr);
3185 	MT_BUG_ON(mt, mas.index != 0);
3186 	MT_BUG_ON(mt, mas.last != 0);
3187 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3188 
3189 	/* walk: pause -> root */
3190 	mas_set(&mas, 0);
3191 	mas_pause(&mas);
3192 	entry = mas_walk(&mas);
3193 	MT_BUG_ON(mt, entry != ptr);
3194 	MT_BUG_ON(mt, mas.index != 0);
3195 	MT_BUG_ON(mt, mas.last != 0);
3196 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3197 
3198 	/* walk: none -> root */
3199 	mas.node = MAS_NONE;
3200 	entry = mas_walk(&mas);
3201 	MT_BUG_ON(mt, entry != ptr);
3202 	MT_BUG_ON(mt, mas.index != 0);
3203 	MT_BUG_ON(mt, mas.last != 0);
3204 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3205 
3206 	/* walk: root -> root */
3207 	entry = mas_walk(&mas);
3208 	MT_BUG_ON(mt, entry != ptr);
3209 	MT_BUG_ON(mt, mas.index != 0);
3210 	MT_BUG_ON(mt, mas.last != 0);
3211 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3212 
3213 	/* walk: root -> none */
3214 	mas_set(&mas, 10);
3215 	entry = mas_walk(&mas);
3216 	MT_BUG_ON(mt, entry != NULL);
3217 	MT_BUG_ON(mt, mas.index != 1);
3218 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3219 	MT_BUG_ON(mt, mas.node != MAS_NONE);
3220 
3221 	/* walk: none -> root */
3222 	mas.index = mas.last = 0;
3223 	entry = mas_walk(&mas);
3224 	MT_BUG_ON(mt, entry != ptr);
3225 	MT_BUG_ON(mt, mas.index != 0);
3226 	MT_BUG_ON(mt, mas.last != 0);
3227 	MT_BUG_ON(mt, mas.node != MAS_ROOT);
3228 
3229 	mas_unlock(&mas);
3230 
3231 	/* Check when there is an actual node */
3232 	mtree_store_range(mt, 0, 0, NULL, GFP_KERNEL);
3233 	mtree_store_range(mt, 0x1000, 0x1500, ptr, GFP_KERNEL);
3234 	mtree_store_range(mt, 0x2000, 0x2500, ptr2, GFP_KERNEL);
3235 	mtree_store_range(mt, 0x3000, 0x3500, ptr3, GFP_KERNEL);
3236 
3237 	mas_lock(&mas);
3238 
3239 	/* next: start ->active */
3240 	mas_set(&mas, 0);
3241 	entry = mas_next(&mas, ULONG_MAX);
3242 	MT_BUG_ON(mt, entry != ptr);
3243 	MT_BUG_ON(mt, mas.index != 0x1000);
3244 	MT_BUG_ON(mt, mas.last != 0x1500);
3245 	MT_BUG_ON(mt, !mas_active(mas));
3246 
3247 	/* next: pause ->active */
3248 	mas_set(&mas, 0);
3249 	mas_pause(&mas);
3250 	entry = mas_next(&mas, ULONG_MAX);
3251 	MT_BUG_ON(mt, entry != ptr);
3252 	MT_BUG_ON(mt, mas.index != 0x1000);
3253 	MT_BUG_ON(mt, mas.last != 0x1500);
3254 	MT_BUG_ON(mt, !mas_active(mas));
3255 
3256 	/* next: none ->active */
3257 	mas.index = mas.last = 0;
3258 	mas.offset = 0;
3259 	mas.node = MAS_NONE;
3260 	entry = mas_next(&mas, ULONG_MAX);
3261 	MT_BUG_ON(mt, entry != ptr);
3262 	MT_BUG_ON(mt, mas.index != 0x1000);
3263 	MT_BUG_ON(mt, mas.last != 0x1500);
3264 	MT_BUG_ON(mt, !mas_active(mas));
3265 
3266 	/* next:active ->active */
3267 	entry = mas_next(&mas, ULONG_MAX);
3268 	MT_BUG_ON(mt, entry != ptr2);
3269 	MT_BUG_ON(mt, mas.index != 0x2000);
3270 	MT_BUG_ON(mt, mas.last != 0x2500);
3271 	MT_BUG_ON(mt, !mas_active(mas));
3272 
3273 	/* next:active -> active beyond data */
3274 	entry = mas_next(&mas, 0x2999);
3275 	MT_BUG_ON(mt, entry != NULL);
3276 	MT_BUG_ON(mt, mas.index != 0x2501);
3277 	MT_BUG_ON(mt, mas.last != 0x2fff);
3278 	MT_BUG_ON(mt, !mas_active(mas));
3279 
3280 	/* Continue after last range ends after max */
3281 	entry = mas_next(&mas, ULONG_MAX);
3282 	MT_BUG_ON(mt, entry != ptr3);
3283 	MT_BUG_ON(mt, mas.index != 0x3000);
3284 	MT_BUG_ON(mt, mas.last != 0x3500);
3285 	MT_BUG_ON(mt, !mas_active(mas));
3286 
3287 	/* next:active -> active continued */
3288 	entry = mas_next(&mas, ULONG_MAX);
3289 	MT_BUG_ON(mt, entry != NULL);
3290 	MT_BUG_ON(mt, mas.index != 0x3501);
3291 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3292 	MT_BUG_ON(mt, !mas_active(mas));
3293 
3294 	/* next:active -> overflow  */
3295 	entry = mas_next(&mas, ULONG_MAX);
3296 	MT_BUG_ON(mt, entry != NULL);
3297 	MT_BUG_ON(mt, mas.index != 0x3501);
3298 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3299 	MT_BUG_ON(mt, mas.node != MAS_OVERFLOW);
3300 
3301 	/* next:overflow -> overflow  */
3302 	entry = mas_next(&mas, ULONG_MAX);
3303 	MT_BUG_ON(mt, entry != NULL);
3304 	MT_BUG_ON(mt, mas.index != 0x3501);
3305 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3306 	MT_BUG_ON(mt, mas.node != MAS_OVERFLOW);
3307 
3308 	/* prev:overflow -> active  */
3309 	entry = mas_prev(&mas, 0);
3310 	MT_BUG_ON(mt, entry != ptr3);
3311 	MT_BUG_ON(mt, mas.index != 0x3000);
3312 	MT_BUG_ON(mt, mas.last != 0x3500);
3313 	MT_BUG_ON(mt, !mas_active(mas));
3314 
3315 	/* next: none -> active, skip value at location */
3316 	mas_set(&mas, 0);
3317 	entry = mas_next(&mas, ULONG_MAX);
3318 	mas.node = MAS_NONE;
3319 	mas.offset = 0;
3320 	entry = mas_next(&mas, ULONG_MAX);
3321 	MT_BUG_ON(mt, entry != ptr2);
3322 	MT_BUG_ON(mt, mas.index != 0x2000);
3323 	MT_BUG_ON(mt, mas.last != 0x2500);
3324 	MT_BUG_ON(mt, !mas_active(mas));
3325 
3326 	/* prev:active ->active */
3327 	entry = mas_prev(&mas, 0);
3328 	MT_BUG_ON(mt, entry != ptr);
3329 	MT_BUG_ON(mt, mas.index != 0x1000);
3330 	MT_BUG_ON(mt, mas.last != 0x1500);
3331 	MT_BUG_ON(mt, !mas_active(mas));
3332 
3333 	/* prev:active -> active spanning end range */
3334 	entry = mas_prev(&mas, 0x0100);
3335 	MT_BUG_ON(mt, entry != NULL);
3336 	MT_BUG_ON(mt, mas.index != 0);
3337 	MT_BUG_ON(mt, mas.last != 0x0FFF);
3338 	MT_BUG_ON(mt, !mas_active(mas));
3339 
3340 	/* prev:active -> underflow */
3341 	entry = mas_prev(&mas, 0);
3342 	MT_BUG_ON(mt, entry != NULL);
3343 	MT_BUG_ON(mt, mas.index != 0);
3344 	MT_BUG_ON(mt, mas.last != 0x0FFF);
3345 	MT_BUG_ON(mt, mas.node != MAS_UNDERFLOW);
3346 
3347 	/* prev:underflow -> underflow */
3348 	entry = mas_prev(&mas, 0);
3349 	MT_BUG_ON(mt, entry != NULL);
3350 	MT_BUG_ON(mt, mas.index != 0);
3351 	MT_BUG_ON(mt, mas.last != 0x0FFF);
3352 	MT_BUG_ON(mt, mas.node != MAS_UNDERFLOW);
3353 
3354 	/* next:underflow -> active */
3355 	entry = mas_next(&mas, ULONG_MAX);
3356 	MT_BUG_ON(mt, entry != ptr);
3357 	MT_BUG_ON(mt, mas.index != 0x1000);
3358 	MT_BUG_ON(mt, mas.last != 0x1500);
3359 	MT_BUG_ON(mt, !mas_active(mas));
3360 
3361 	/* prev:first value -> underflow */
3362 	entry = mas_prev(&mas, 0x1000);
3363 	MT_BUG_ON(mt, entry != NULL);
3364 	MT_BUG_ON(mt, mas.index != 0x1000);
3365 	MT_BUG_ON(mt, mas.last != 0x1500);
3366 	MT_BUG_ON(mt, mas.node != MAS_UNDERFLOW);
3367 
3368 	/* find:underflow -> first value */
3369 	entry = mas_find(&mas, ULONG_MAX);
3370 	MT_BUG_ON(mt, entry != ptr);
3371 	MT_BUG_ON(mt, mas.index != 0x1000);
3372 	MT_BUG_ON(mt, mas.last != 0x1500);
3373 	MT_BUG_ON(mt, !mas_active(mas));
3374 
3375 	/* prev: pause ->active */
3376 	mas_set(&mas, 0x3600);
3377 	entry = mas_prev(&mas, 0);
3378 	MT_BUG_ON(mt, entry != ptr3);
3379 	mas_pause(&mas);
3380 	entry = mas_prev(&mas, 0);
3381 	MT_BUG_ON(mt, entry != ptr2);
3382 	MT_BUG_ON(mt, mas.index != 0x2000);
3383 	MT_BUG_ON(mt, mas.last != 0x2500);
3384 	MT_BUG_ON(mt, !mas_active(mas));
3385 
3386 	/* prev:active -> active spanning min */
3387 	entry = mas_prev(&mas, 0x1600);
3388 	MT_BUG_ON(mt, entry != NULL);
3389 	MT_BUG_ON(mt, mas.index != 0x1501);
3390 	MT_BUG_ON(mt, mas.last != 0x1FFF);
3391 	MT_BUG_ON(mt, !mas_active(mas));
3392 
3393 	/* prev: active ->active, continue */
3394 	entry = mas_prev(&mas, 0);
3395 	MT_BUG_ON(mt, entry != ptr);
3396 	MT_BUG_ON(mt, mas.index != 0x1000);
3397 	MT_BUG_ON(mt, mas.last != 0x1500);
3398 	MT_BUG_ON(mt, !mas_active(mas));
3399 
3400 	/* find: start ->active */
3401 	mas_set(&mas, 0);
3402 	entry = mas_find(&mas, ULONG_MAX);
3403 	MT_BUG_ON(mt, entry != ptr);
3404 	MT_BUG_ON(mt, mas.index != 0x1000);
3405 	MT_BUG_ON(mt, mas.last != 0x1500);
3406 	MT_BUG_ON(mt, !mas_active(mas));
3407 
3408 	/* find: pause ->active */
3409 	mas_set(&mas, 0);
3410 	mas_pause(&mas);
3411 	entry = mas_find(&mas, ULONG_MAX);
3412 	MT_BUG_ON(mt, entry != ptr);
3413 	MT_BUG_ON(mt, mas.index != 0x1000);
3414 	MT_BUG_ON(mt, mas.last != 0x1500);
3415 	MT_BUG_ON(mt, !mas_active(mas));
3416 
3417 	/* find: start ->active on value */;
3418 	mas_set(&mas, 1200);
3419 	entry = mas_find(&mas, ULONG_MAX);
3420 	MT_BUG_ON(mt, entry != ptr);
3421 	MT_BUG_ON(mt, mas.index != 0x1000);
3422 	MT_BUG_ON(mt, mas.last != 0x1500);
3423 	MT_BUG_ON(mt, !mas_active(mas));
3424 
3425 	/* find:active ->active */
3426 	entry = mas_find(&mas, ULONG_MAX);
3427 	MT_BUG_ON(mt, entry != ptr2);
3428 	MT_BUG_ON(mt, mas.index != 0x2000);
3429 	MT_BUG_ON(mt, mas.last != 0x2500);
3430 	MT_BUG_ON(mt, !mas_active(mas));
3431 
3432 
3433 	/* find:active -> active (NULL)*/
3434 	entry = mas_find(&mas, 0x2700);
3435 	MT_BUG_ON(mt, entry != NULL);
3436 	MT_BUG_ON(mt, mas.index != 0x2501);
3437 	MT_BUG_ON(mt, mas.last != 0x2FFF);
3438 	MT_BUG_ON(mt, !mas_active(mas));
3439 
3440 	/* find: overflow ->active */
3441 	entry = mas_find(&mas, 0x5000);
3442 	MT_BUG_ON(mt, entry != ptr3);
3443 	MT_BUG_ON(mt, mas.index != 0x3000);
3444 	MT_BUG_ON(mt, mas.last != 0x3500);
3445 	MT_BUG_ON(mt, !mas_active(mas));
3446 
3447 	/* find:active -> active (NULL) end*/
3448 	entry = mas_find(&mas, ULONG_MAX);
3449 	MT_BUG_ON(mt, entry != NULL);
3450 	MT_BUG_ON(mt, mas.index != 0x3501);
3451 	MT_BUG_ON(mt, mas.last != ULONG_MAX);
3452 	MT_BUG_ON(mt, !mas_active(mas));
3453 
3454 	/* find_rev: active (END) ->active */
3455 	entry = mas_find_rev(&mas, 0);
3456 	MT_BUG_ON(mt, entry != ptr3);
3457 	MT_BUG_ON(mt, mas.index != 0x3000);
3458 	MT_BUG_ON(mt, mas.last != 0x3500);
3459 	MT_BUG_ON(mt, !mas_active(mas));
3460 
3461 	/* find_rev:active ->active */
3462 	entry = mas_find_rev(&mas, 0);
3463 	MT_BUG_ON(mt, entry != ptr2);
3464 	MT_BUG_ON(mt, mas.index != 0x2000);
3465 	MT_BUG_ON(mt, mas.last != 0x2500);
3466 	MT_BUG_ON(mt, !mas_active(mas));
3467 
3468 	/* find_rev: pause ->active */
3469 	mas_pause(&mas);
3470 	entry = mas_find_rev(&mas, 0);
3471 	MT_BUG_ON(mt, entry != ptr);
3472 	MT_BUG_ON(mt, mas.index != 0x1000);
3473 	MT_BUG_ON(mt, mas.last != 0x1500);
3474 	MT_BUG_ON(mt, !mas_active(mas));
3475 
3476 	/* find_rev:active -> active */
3477 	entry = mas_find_rev(&mas, 0);
3478 	MT_BUG_ON(mt, entry != NULL);
3479 	MT_BUG_ON(mt, mas.index != 0);
3480 	MT_BUG_ON(mt, mas.last != 0x0FFF);
3481 	MT_BUG_ON(mt, !mas_active(mas));
3482 
3483 	/* find_rev: start ->active */
3484 	mas_set(&mas, 0x1200);
3485 	entry = mas_find_rev(&mas, 0);
3486 	MT_BUG_ON(mt, entry != ptr);
3487 	MT_BUG_ON(mt, mas.index != 0x1000);
3488 	MT_BUG_ON(mt, mas.last != 0x1500);
3489 	MT_BUG_ON(mt, !mas_active(mas));
3490 
3491 	/* mas_walk start ->active */
3492 	mas_set(&mas, 0x1200);
3493 	entry = mas_walk(&mas);
3494 	MT_BUG_ON(mt, entry != ptr);
3495 	MT_BUG_ON(mt, mas.index != 0x1000);
3496 	MT_BUG_ON(mt, mas.last != 0x1500);
3497 	MT_BUG_ON(mt, !mas_active(mas));
3498 
3499 	/* mas_walk start ->active */
3500 	mas_set(&mas, 0x1600);
3501 	entry = mas_walk(&mas);
3502 	MT_BUG_ON(mt, entry != NULL);
3503 	MT_BUG_ON(mt, mas.index != 0x1501);
3504 	MT_BUG_ON(mt, mas.last != 0x1fff);
3505 	MT_BUG_ON(mt, !mas_active(mas));
3506 
3507 	/* mas_walk pause ->active */
3508 	mas_set(&mas, 0x1200);
3509 	mas_pause(&mas);
3510 	entry = mas_walk(&mas);
3511 	MT_BUG_ON(mt, entry != ptr);
3512 	MT_BUG_ON(mt, mas.index != 0x1000);
3513 	MT_BUG_ON(mt, mas.last != 0x1500);
3514 	MT_BUG_ON(mt, !mas_active(mas));
3515 
3516 	/* mas_walk pause -> active */
3517 	mas_set(&mas, 0x1600);
3518 	mas_pause(&mas);
3519 	entry = mas_walk(&mas);
3520 	MT_BUG_ON(mt, entry != NULL);
3521 	MT_BUG_ON(mt, mas.index != 0x1501);
3522 	MT_BUG_ON(mt, mas.last != 0x1fff);
3523 	MT_BUG_ON(mt, !mas_active(mas));
3524 
3525 	/* mas_walk none -> active */
3526 	mas_set(&mas, 0x1200);
3527 	mas.node = MAS_NONE;
3528 	entry = mas_walk(&mas);
3529 	MT_BUG_ON(mt, entry != ptr);
3530 	MT_BUG_ON(mt, mas.index != 0x1000);
3531 	MT_BUG_ON(mt, mas.last != 0x1500);
3532 	MT_BUG_ON(mt, !mas_active(mas));
3533 
3534 	/* mas_walk none -> active */
3535 	mas_set(&mas, 0x1600);
3536 	mas.node = MAS_NONE;
3537 	entry = mas_walk(&mas);
3538 	MT_BUG_ON(mt, entry != NULL);
3539 	MT_BUG_ON(mt, mas.index != 0x1501);
3540 	MT_BUG_ON(mt, mas.last != 0x1fff);
3541 	MT_BUG_ON(mt, !mas_active(mas));
3542 
3543 	/* mas_walk active -> active */
3544 	mas.index = 0x1200;
3545 	mas.last = 0x1200;
3546 	mas.offset = 0;
3547 	entry = mas_walk(&mas);
3548 	MT_BUG_ON(mt, entry != ptr);
3549 	MT_BUG_ON(mt, mas.index != 0x1000);
3550 	MT_BUG_ON(mt, mas.last != 0x1500);
3551 	MT_BUG_ON(mt, !mas_active(mas));
3552 
3553 	/* mas_walk active -> active */
3554 	mas.index = 0x1600;
3555 	mas.last = 0x1600;
3556 	entry = mas_walk(&mas);
3557 	MT_BUG_ON(mt, entry != NULL);
3558 	MT_BUG_ON(mt, mas.index != 0x1501);
3559 	MT_BUG_ON(mt, mas.last != 0x1fff);
3560 	MT_BUG_ON(mt, !mas_active(mas));
3561 
3562 	mas_unlock(&mas);
3563 }
3564 
3565 static DEFINE_MTREE(tree);
3566 static int __init maple_tree_seed(void)
3567 {
3568 	unsigned long set[] = { 5015, 5014, 5017, 25, 1000,
3569 				1001, 1002, 1003, 1005, 0,
3570 				5003, 5002};
3571 	void *ptr = &set;
3572 
3573 	pr_info("\nTEST STARTING\n\n");
3574 
3575 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3576 	check_root_expand(&tree);
3577 	mtree_destroy(&tree);
3578 
3579 #if defined(BENCH_SLOT_STORE)
3580 #define BENCH
3581 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3582 	bench_slot_store(&tree);
3583 	mtree_destroy(&tree);
3584 	goto skip;
3585 #endif
3586 #if defined(BENCH_NODE_STORE)
3587 #define BENCH
3588 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3589 	bench_node_store(&tree);
3590 	mtree_destroy(&tree);
3591 	goto skip;
3592 #endif
3593 #if defined(BENCH_AWALK)
3594 #define BENCH
3595 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3596 	bench_awalk(&tree);
3597 	mtree_destroy(&tree);
3598 	goto skip;
3599 #endif
3600 #if defined(BENCH_WALK)
3601 #define BENCH
3602 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3603 	bench_walk(&tree);
3604 	mtree_destroy(&tree);
3605 	goto skip;
3606 #endif
3607 #if defined(BENCH_FORK)
3608 #define BENCH
3609 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3610 	bench_forking(&tree);
3611 	mtree_destroy(&tree);
3612 	goto skip;
3613 #endif
3614 #if defined(BENCH_MT_FOR_EACH)
3615 #define BENCH
3616 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3617 	bench_mt_for_each(&tree);
3618 	mtree_destroy(&tree);
3619 	goto skip;
3620 #endif
3621 #if defined(BENCH_MAS_FOR_EACH)
3622 #define BENCH
3623 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3624 	bench_mas_for_each(&tree);
3625 	mtree_destroy(&tree);
3626 	goto skip;
3627 #endif
3628 #if defined(BENCH_MAS_PREV)
3629 #define BENCH
3630 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3631 	bench_mas_prev(&tree);
3632 	mtree_destroy(&tree);
3633 	goto skip;
3634 #endif
3635 
3636 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3637 	check_iteration(&tree);
3638 	mtree_destroy(&tree);
3639 
3640 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3641 	check_forking(&tree);
3642 	mtree_destroy(&tree);
3643 
3644 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3645 	check_mas_store_gfp(&tree);
3646 	mtree_destroy(&tree);
3647 
3648 	/* Test ranges (store and insert) */
3649 	mt_init_flags(&tree, 0);
3650 	check_ranges(&tree);
3651 	mtree_destroy(&tree);
3652 
3653 #if defined(CONFIG_64BIT)
3654 	/* These tests have ranges outside of 4GB */
3655 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3656 	check_alloc_range(&tree);
3657 	mtree_destroy(&tree);
3658 
3659 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3660 	check_alloc_rev_range(&tree);
3661 	mtree_destroy(&tree);
3662 #endif
3663 
3664 	mt_init_flags(&tree, 0);
3665 
3666 	check_load(&tree, set[0], NULL);       /* See if 5015 -> NULL */
3667 
3668 	check_insert(&tree, set[9], &tree);     /* Insert 0 */
3669 	check_load(&tree, set[9], &tree);       /* See if 0 -> &tree */
3670 	check_load(&tree, set[0], NULL);       /* See if 5015 -> NULL */
3671 
3672 	check_insert(&tree, set[10], ptr);      /* Insert 5003 */
3673 	check_load(&tree, set[9], &tree);       /* See if 0 -> &tree */
3674 	check_load(&tree, set[11], NULL);       /* See if 5002 -> NULL */
3675 	check_load(&tree, set[10], ptr);       /* See if 5003 -> ptr */
3676 
3677 	/* Clear out the tree */
3678 	mtree_destroy(&tree);
3679 
3680 	/* Try to insert, insert a dup, and load back what was inserted. */
3681 	mt_init_flags(&tree, 0);
3682 	check_insert(&tree, set[0], &tree);     /* Insert 5015 */
3683 	check_dup_insert(&tree, set[0], &tree); /* Insert 5015 again */
3684 	check_load(&tree, set[0], &tree);       /* See if 5015 -> &tree */
3685 
3686 	/*
3687 	 * Second set of tests try to load a value that doesn't exist, inserts
3688 	 * a second value, then loads the value again
3689 	 */
3690 	check_load(&tree, set[1], NULL);        /* See if 5014 -> NULL */
3691 	check_insert(&tree, set[1], ptr);       /* insert 5014 -> ptr */
3692 	check_load(&tree, set[1], ptr);         /* See if 5014 -> ptr */
3693 	check_load(&tree, set[0], &tree);       /* See if 5015 -> &tree */
3694 	/*
3695 	 * Tree currently contains:
3696 	 * p[0]: 14 -> (nil) p[1]: 15 -> ptr p[2]: 16 -> &tree p[3]: 0 -> (nil)
3697 	 */
3698 	check_insert(&tree, set[6], ptr);       /* insert 1002 -> ptr */
3699 	check_insert(&tree, set[7], &tree);       /* insert 1003 -> &tree */
3700 
3701 	check_load(&tree, set[0], &tree);       /* See if 5015 -> &tree */
3702 	check_load(&tree, set[1], ptr);         /* See if 5014 -> ptr */
3703 	check_load(&tree, set[6], ptr);         /* See if 1002 -> ptr */
3704 	check_load(&tree, set[7], &tree);       /* 1003 = &tree ? */
3705 
3706 	/* Clear out tree */
3707 	mtree_destroy(&tree);
3708 
3709 	mt_init_flags(&tree, 0);
3710 	/* Test inserting into a NULL hole. */
3711 	check_insert(&tree, set[5], ptr);       /* insert 1001 -> ptr */
3712 	check_insert(&tree, set[7], &tree);       /* insert 1003 -> &tree */
3713 	check_insert(&tree, set[6], ptr);       /* insert 1002 -> ptr */
3714 	check_load(&tree, set[5], ptr);         /* See if 1001 -> ptr */
3715 	check_load(&tree, set[6], ptr);         /* See if 1002 -> ptr */
3716 	check_load(&tree, set[7], &tree);       /* See if 1003 -> &tree */
3717 
3718 	/* Clear out the tree */
3719 	mtree_destroy(&tree);
3720 
3721 	mt_init_flags(&tree, 0);
3722 	/*
3723 	 *       set[] = {5015, 5014, 5017, 25, 1000,
3724 	 *                1001, 1002, 1003, 1005, 0,
3725 	 *                5003, 5002};
3726 	 */
3727 
3728 	check_insert(&tree, set[0], ptr); /* 5015 */
3729 	check_insert(&tree, set[1], &tree); /* 5014 */
3730 	check_insert(&tree, set[2], ptr); /* 5017 */
3731 	check_insert(&tree, set[3], &tree); /* 25 */
3732 	check_load(&tree, set[0], ptr);
3733 	check_load(&tree, set[1], &tree);
3734 	check_load(&tree, set[2], ptr);
3735 	check_load(&tree, set[3], &tree);
3736 	check_insert(&tree, set[4], ptr); /* 1000 < Should split. */
3737 	check_load(&tree, set[0], ptr);
3738 	check_load(&tree, set[1], &tree);
3739 	check_load(&tree, set[2], ptr);
3740 	check_load(&tree, set[3], &tree); /*25 */
3741 	check_load(&tree, set[4], ptr);
3742 	check_insert(&tree, set[5], &tree); /* 1001 */
3743 	check_load(&tree, set[0], ptr);
3744 	check_load(&tree, set[1], &tree);
3745 	check_load(&tree, set[2], ptr);
3746 	check_load(&tree, set[3], &tree);
3747 	check_load(&tree, set[4], ptr);
3748 	check_load(&tree, set[5], &tree);
3749 	check_insert(&tree, set[6], ptr);
3750 	check_load(&tree, set[0], ptr);
3751 	check_load(&tree, set[1], &tree);
3752 	check_load(&tree, set[2], ptr);
3753 	check_load(&tree, set[3], &tree);
3754 	check_load(&tree, set[4], ptr);
3755 	check_load(&tree, set[5], &tree);
3756 	check_load(&tree, set[6], ptr);
3757 	check_insert(&tree, set[7], &tree);
3758 	check_load(&tree, set[0], ptr);
3759 	check_insert(&tree, set[8], ptr);
3760 
3761 	check_insert(&tree, set[9], &tree);
3762 
3763 	check_load(&tree, set[0], ptr);
3764 	check_load(&tree, set[1], &tree);
3765 	check_load(&tree, set[2], ptr);
3766 	check_load(&tree, set[3], &tree);
3767 	check_load(&tree, set[4], ptr);
3768 	check_load(&tree, set[5], &tree);
3769 	check_load(&tree, set[6], ptr);
3770 	check_load(&tree, set[9], &tree);
3771 	mtree_destroy(&tree);
3772 
3773 	mt_init_flags(&tree, 0);
3774 	check_seq(&tree, 16, false);
3775 	mtree_destroy(&tree);
3776 
3777 	mt_init_flags(&tree, 0);
3778 	check_seq(&tree, 1000, true);
3779 	mtree_destroy(&tree);
3780 
3781 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3782 	check_rev_seq(&tree, 1000, true);
3783 	mtree_destroy(&tree);
3784 
3785 	check_lower_bound_split(&tree);
3786 	check_upper_bound_split(&tree);
3787 	check_mid_split(&tree);
3788 
3789 	mt_init_flags(&tree, 0);
3790 	check_next_entry(&tree);
3791 	check_find(&tree);
3792 	check_find_2(&tree);
3793 	mtree_destroy(&tree);
3794 
3795 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3796 	check_prev_entry(&tree);
3797 	mtree_destroy(&tree);
3798 
3799 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3800 	check_gap_combining(&tree);
3801 	mtree_destroy(&tree);
3802 
3803 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3804 	check_node_overwrite(&tree);
3805 	mtree_destroy(&tree);
3806 
3807 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3808 	next_prev_test(&tree);
3809 	mtree_destroy(&tree);
3810 
3811 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3812 	check_spanning_relatives(&tree);
3813 	mtree_destroy(&tree);
3814 
3815 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3816 	check_rev_find(&tree);
3817 	mtree_destroy(&tree);
3818 
3819 	mt_init_flags(&tree, 0);
3820 	check_fuzzer(&tree);
3821 	mtree_destroy(&tree);
3822 
3823 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3824 	check_dup(&tree);
3825 	mtree_destroy(&tree);
3826 
3827 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3828 	check_bnode_min_spanning(&tree);
3829 	mtree_destroy(&tree);
3830 
3831 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3832 	check_empty_area_window(&tree);
3833 	mtree_destroy(&tree);
3834 
3835 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3836 	check_empty_area_fill(&tree);
3837 	mtree_destroy(&tree);
3838 
3839 	mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
3840 	check_state_handling(&tree);
3841 	mtree_destroy(&tree);
3842 
3843 #if defined(BENCH)
3844 skip:
3845 #endif
3846 	rcu_barrier();
3847 	pr_info("maple_tree: %u of %u tests passed\n",
3848 			atomic_read(&maple_tree_tests_passed),
3849 			atomic_read(&maple_tree_tests_run));
3850 	if (atomic_read(&maple_tree_tests_run) ==
3851 	    atomic_read(&maple_tree_tests_passed))
3852 		return 0;
3853 
3854 	return -EINVAL;
3855 }
3856 
3857 static void __exit maple_tree_harvest(void)
3858 {
3859 
3860 }
3861 
3862 module_init(maple_tree_seed);
3863 module_exit(maple_tree_harvest);
3864 MODULE_AUTHOR("Liam R. Howlett <Liam.Howlett@Oracle.com>");
3865 MODULE_LICENSE("GPL");
3866