diff options
Diffstat (limited to 'tools/testing/radix-tree/idr-test.c')
-rw-r--r-- | tools/testing/radix-tree/idr-test.c | 29 |
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 | ||
156 | void idr_get_next_test(void) | 156 | void 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 | ||
490 | void ida_thread_tests(void) | 511 | void 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++) |