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 /lib | |
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>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/test_ida.c | 23 |
1 files changed, 23 insertions, 0 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; |