diff options
author | Matthew Wilcox <willy@infradead.org> | 2018-06-18 17:25:20 -0400 |
---|---|---|
committer | Matthew Wilcox <willy@infradead.org> | 2018-08-21 23:54:20 -0400 |
commit | 161b47e31f9912947a3a72dcb161c79978a1fe04 (patch) | |
tree | b692e9d61c20e194b50e256a4952ea4776331de3 | |
parent | 0a3856392cff1542170b5bc37211c9a21fd0c3f6 (diff) |
test_ida: Move ida_check_max
Convert to new API and move to kernel space.
Signed-off-by: Matthew Wilcox <willy@infradead.org>
-rw-r--r-- | lib/test_ida.c | 23 | ||||
-rw-r--r-- | tools/testing/radix-tree/idr-test.c | 28 |
2 files changed, 23 insertions, 28 deletions
diff --git a/lib/test_ida.c b/lib/test_ida.c index 1988f91a20c8..44174ec9f5bf 100644 --- a/lib/test_ida.c +++ b/lib/test_ida.c | |||
@@ -47,6 +47,28 @@ static void ida_check_leaf(struct ida *ida, unsigned int base) | |||
47 | IDA_BUG_ON(ida, !ida_is_empty(ida)); | 47 | IDA_BUG_ON(ida, !ida_is_empty(ida)); |
48 | } | 48 | } |
49 | 49 | ||
50 | /* | ||
51 | * Check allocations up to and slightly above the maximum allowed (2^31-1) ID. | ||
52 | * Allocating up to 2^31-1 should succeed, and then allocating the next one | ||
53 | * should fail. | ||
54 | */ | ||
55 | static void ida_check_max(struct ida *ida) | ||
56 | { | ||
57 | unsigned long i, j; | ||
58 | |||
59 | for (j = 1; j < 65537; j *= 2) { | ||
60 | unsigned long base = (1UL << 31) - j; | ||
61 | for (i = 0; i < j; i++) { | ||
62 | IDA_BUG_ON(ida, ida_alloc_min(ida, base, GFP_KERNEL) != | ||
63 | base + i); | ||
64 | } | ||
65 | IDA_BUG_ON(ida, ida_alloc_min(ida, base, GFP_KERNEL) != | ||
66 | -ENOSPC); | ||
67 | ida_destroy(ida); | ||
68 | IDA_BUG_ON(ida, !ida_is_empty(ida)); | ||
69 | } | ||
70 | } | ||
71 | |||
50 | static int ida_checks(void) | 72 | static int ida_checks(void) |
51 | { | 73 | { |
52 | DEFINE_IDA(ida); | 74 | DEFINE_IDA(ida); |
@@ -55,6 +77,7 @@ static int ida_checks(void) | |||
55 | ida_check_leaf(&ida, 0); | 77 | ida_check_leaf(&ida, 0); |
56 | ida_check_leaf(&ida, 1024); | 78 | ida_check_leaf(&ida, 1024); |
57 | ida_check_leaf(&ida, 1024 * 64); | 79 | ida_check_leaf(&ida, 1024 * 64); |
80 | ida_check_max(&ida); | ||
58 | 81 | ||
59 | printk("IDA: %u of %u tests passed\n", tests_passed, tests_run); | 82 | printk("IDA: %u of %u tests passed\n", tests_passed, tests_run); |
60 | return (tests_run != tests_passed) ? 0 : -EINVAL; | 83 | return (tests_run != tests_passed) ? 0 : -EINVAL; |
diff --git a/tools/testing/radix-tree/idr-test.c b/tools/testing/radix-tree/idr-test.c index fef1f45b927b..bd9699327f95 100644 --- a/tools/testing/radix-tree/idr-test.c +++ b/tools/testing/radix-tree/idr-test.c | |||
@@ -396,33 +396,6 @@ void ida_check_conv(void) | |||
396 | ida_destroy(&ida); | 396 | ida_destroy(&ida); |
397 | } | 397 | } |
398 | 398 | ||
399 | /* | ||
400 | * Check allocations up to and slightly above the maximum allowed (2^31-1) ID. | ||
401 | * Allocating up to 2^31-1 should succeed, and then allocating the next one | ||
402 | * should fail. | ||
403 | */ | ||
404 | void ida_check_max(void) | ||
405 | { | ||
406 | DEFINE_IDA(ida); | ||
407 | int id, err; | ||
408 | unsigned long i, j; | ||
409 | |||
410 | for (j = 1; j < 65537; j *= 2) { | ||
411 | unsigned long base = (1UL << 31) - j; | ||
412 | for (i = 0; i < j; i++) { | ||
413 | assert(ida_pre_get(&ida, GFP_KERNEL)); | ||
414 | assert(!ida_get_new_above(&ida, base, &id)); | ||
415 | assert(id == base + i); | ||
416 | } | ||
417 | assert(ida_pre_get(&ida, GFP_KERNEL)); | ||
418 | err = ida_get_new_above(&ida, base, &id); | ||
419 | assert(err == -ENOSPC); | ||
420 | ida_destroy(&ida); | ||
421 | assert(ida_is_empty(&ida)); | ||
422 | rcu_barrier(); | ||
423 | } | ||
424 | } | ||
425 | |||
426 | void ida_check_random(void) | 399 | void ida_check_random(void) |
427 | { | 400 | { |
428 | DEFINE_IDA(ida); | 401 | DEFINE_IDA(ida); |
@@ -534,7 +507,6 @@ void user_ida_checks(void) | |||
534 | ida_destroy(&ida); | 507 | ida_destroy(&ida); |
535 | assert(ida_is_empty(&ida)); | 508 | assert(ida_is_empty(&ida)); |
536 | 509 | ||
537 | ida_check_max(); | ||
538 | ida_check_conv(); | 510 | ida_check_conv(); |
539 | ida_check_random(); | 511 | ida_check_random(); |
540 | ida_simple_get_remove_test(); | 512 | ida_simple_get_remove_test(); |