Loading lib/test_ida.c +25 −0 Original line number Diff line number Diff line Loading @@ -25,11 +25,36 @@ void ida_dump(struct ida *ida) { } } \ } while (0) /* * Check what happens when we fill a leaf and then delete it. This may * discover mishandling of IDR_FREE. */ static void ida_check_leaf(struct ida *ida, unsigned int base) { unsigned long i; for (i = 0; i < IDA_BITMAP_BITS; i++) { IDA_BUG_ON(ida, ida_alloc_min(ida, base, GFP_KERNEL) != base + i); } ida_destroy(ida); IDA_BUG_ON(ida, !ida_is_empty(ida)); IDA_BUG_ON(ida, ida_alloc(ida, GFP_KERNEL) != 0); IDA_BUG_ON(ida, ida_is_empty(ida)); ida_free(ida, 0); IDA_BUG_ON(ida, !ida_is_empty(ida)); } static int ida_checks(void) { DEFINE_IDA(ida); IDA_BUG_ON(&ida, !ida_is_empty(&ida)); ida_check_leaf(&ida, 0); ida_check_leaf(&ida, 1024); ida_check_leaf(&ida, 1024 * 64); printk("IDA: %u of %u tests passed\n", tests_passed, tests_run); return (tests_run != tests_passed) ? 0 : -EINVAL; Loading tools/testing/radix-tree/idr-test.c +0 −27 Original line number Diff line number Diff line Loading @@ -336,32 +336,6 @@ void ida_check_nomem(void) IDA_BUG_ON(&ida, !ida_is_empty(&ida)); } /* * Check what happens when we fill a leaf and then delete it. This may * discover mishandling of IDR_FREE. */ void ida_check_leaf(void) { DEFINE_IDA(ida); int id; unsigned long i; for (i = 0; i < IDA_BITMAP_BITS; i++) { assert(ida_pre_get(&ida, GFP_KERNEL)); assert(!ida_get_new(&ida, &id)); assert(id == i); } ida_destroy(&ida); assert(ida_is_empty(&ida)); assert(ida_pre_get(&ida, GFP_KERNEL)); assert(!ida_get_new(&ida, &id)); assert(id == 0); ida_destroy(&ida); assert(ida_is_empty(&ida)); } /* * Check handling of conversions between exceptional entries and full bitmaps. */ Loading Loading @@ -560,7 +534,6 @@ void user_ida_checks(void) ida_destroy(&ida); assert(ida_is_empty(&ida)); ida_check_leaf(); ida_check_max(); ida_check_conv(); ida_check_random(); Loading Loading
lib/test_ida.c +25 −0 Original line number Diff line number Diff line Loading @@ -25,11 +25,36 @@ void ida_dump(struct ida *ida) { } } \ } while (0) /* * Check what happens when we fill a leaf and then delete it. This may * discover mishandling of IDR_FREE. */ static void ida_check_leaf(struct ida *ida, unsigned int base) { unsigned long i; for (i = 0; i < IDA_BITMAP_BITS; i++) { IDA_BUG_ON(ida, ida_alloc_min(ida, base, GFP_KERNEL) != base + i); } ida_destroy(ida); IDA_BUG_ON(ida, !ida_is_empty(ida)); IDA_BUG_ON(ida, ida_alloc(ida, GFP_KERNEL) != 0); IDA_BUG_ON(ida, ida_is_empty(ida)); ida_free(ida, 0); IDA_BUG_ON(ida, !ida_is_empty(ida)); } static int ida_checks(void) { DEFINE_IDA(ida); IDA_BUG_ON(&ida, !ida_is_empty(&ida)); ida_check_leaf(&ida, 0); ida_check_leaf(&ida, 1024); ida_check_leaf(&ida, 1024 * 64); printk("IDA: %u of %u tests passed\n", tests_passed, tests_run); return (tests_run != tests_passed) ? 0 : -EINVAL; Loading
tools/testing/radix-tree/idr-test.c +0 −27 Original line number Diff line number Diff line Loading @@ -336,32 +336,6 @@ void ida_check_nomem(void) IDA_BUG_ON(&ida, !ida_is_empty(&ida)); } /* * Check what happens when we fill a leaf and then delete it. This may * discover mishandling of IDR_FREE. */ void ida_check_leaf(void) { DEFINE_IDA(ida); int id; unsigned long i; for (i = 0; i < IDA_BITMAP_BITS; i++) { assert(ida_pre_get(&ida, GFP_KERNEL)); assert(!ida_get_new(&ida, &id)); assert(id == i); } ida_destroy(&ida); assert(ida_is_empty(&ida)); assert(ida_pre_get(&ida, GFP_KERNEL)); assert(!ida_get_new(&ida, &id)); assert(id == 0); ida_destroy(&ida); assert(ida_is_empty(&ida)); } /* * Check handling of conversions between exceptional entries and full bitmaps. */ Loading Loading @@ -560,7 +534,6 @@ void user_ida_checks(void) ida_destroy(&ida); assert(ida_is_empty(&ida)); ida_check_leaf(); ida_check_max(); ida_check_conv(); ida_check_random(); Loading