aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/radix-tree/idr-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/testing/radix-tree/idr-test.c')
-rw-r--r--tools/testing/radix-tree/idr-test.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/tools/testing/radix-tree/idr-test.c b/tools/testing/radix-tree/idr-test.c
index 30cd0b296f1a..44ef9eba5a7a 100644
--- a/tools/testing/radix-tree/idr-test.c
+++ b/tools/testing/radix-tree/idr-test.c
@@ -153,11 +153,12 @@ void idr_nowait_test(void)
153 idr_destroy(&idr); 153 idr_destroy(&idr);
154} 154}
155 155
156void idr_get_next_test(void) 156void idr_get_next_test(int base)
157{ 157{
158 unsigned long i; 158 unsigned long i;
159 int nextid; 159 int nextid;
160 DEFINE_IDR(idr); 160 DEFINE_IDR(idr);
161 idr_init_base(&idr, base);
161 162
162 int indices[] = {4, 7, 9, 15, 65, 128, 1000, 99999, 0}; 163 int indices[] = {4, 7, 9, 15, 65, 128, 1000, 99999, 0};
163 164
@@ -207,6 +208,7 @@ void idr_checks(void)
207 assert(idr_alloc(&idr, item, i, i + 10, GFP_KERNEL) == i); 208 assert(idr_alloc(&idr, item, i, i + 10, GFP_KERNEL) == i);
208 } 209 }
209 assert(idr_alloc(&idr, DUMMY_PTR, i - 2, i, GFP_KERNEL) == -ENOSPC); 210 assert(idr_alloc(&idr, DUMMY_PTR, i - 2, i, GFP_KERNEL) == -ENOSPC);
211 assert(idr_alloc(&idr, DUMMY_PTR, i - 2, i + 10, GFP_KERNEL) == -ENOSPC);
210 212
211 idr_for_each(&idr, item_idr_free, &idr); 213 idr_for_each(&idr, item_idr_free, &idr);
212 idr_destroy(&idr); 214 idr_destroy(&idr);
@@ -214,6 +216,23 @@ void idr_checks(void)
214 216
215 assert(idr_is_empty(&idr)); 217 assert(idr_is_empty(&idr));
216 218
219 idr_set_cursor(&idr, INT_MAX - 3UL);
220 for (i = INT_MAX - 3UL; i < INT_MAX + 3UL; i++) {
221 struct item *item;
222 unsigned int id;
223 if (i <= INT_MAX)
224 item = item_create(i, 0);
225 else
226 item = item_create(i - INT_MAX - 1, 0);
227
228 id = idr_alloc_cyclic(&idr, item, 0, 0, GFP_KERNEL);
229 assert(id == item->index);
230 }
231
232 idr_for_each(&idr, item_idr_free, &idr);
233 idr_destroy(&idr);
234 assert(idr_is_empty(&idr));
235
217 for (i = 1; i < 10000; i++) { 236 for (i = 1; i < 10000; i++) {
218 struct item *item = item_create(i, 0); 237 struct item *item = item_create(i, 0);
219 assert(idr_alloc(&idr, item, 1, 20000, GFP_KERNEL) == i); 238 assert(idr_alloc(&idr, item, 1, 20000, GFP_KERNEL) == i);
@@ -226,7 +245,9 @@ void idr_checks(void)
226 idr_alloc_test(); 245 idr_alloc_test();
227 idr_null_test(); 246 idr_null_test();
228 idr_nowait_test(); 247 idr_nowait_test();
229 idr_get_next_test(); 248 idr_get_next_test(0);
249 idr_get_next_test(1);
250 idr_get_next_test(4);
230} 251}
231 252
232/* 253/*
@@ -380,7 +401,7 @@ void ida_check_random(void)
380 do { 401 do {
381 ida_pre_get(&ida, GFP_KERNEL); 402 ida_pre_get(&ida, GFP_KERNEL);
382 err = ida_get_new_above(&ida, bit, &id); 403 err = ida_get_new_above(&ida, bit, &id);
383 } while (err == -ENOMEM); 404 } while (err == -EAGAIN);
384 assert(!err); 405 assert(!err);
385 assert(id == bit); 406 assert(id == bit);
386 } 407 }
@@ -489,7 +510,7 @@ static void *ida_random_fn(void *arg)
489 510
490void ida_thread_tests(void) 511void ida_thread_tests(void)
491{ 512{
492 pthread_t threads[10]; 513 pthread_t threads[20];
493 int i; 514 int i;
494 515
495 for (i = 0; i < ARRAY_SIZE(threads); i++) 516 for (i = 0; i < ARRAY_SIZE(threads); i++)