Loading lib/Kconfig.debug +3 −0 Original line number Diff line number Diff line Loading @@ -1827,6 +1827,9 @@ config TEST_HASH This is intended to help people writing architecture-specific optimized versions. If unsure, say N. config TEST_IDA tristate "Perform selftest on IDA functions" config TEST_PARMAN tristate "Perform selftest on priority array manager" default n Loading lib/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ obj-$(CONFIG_TEST_BPF) += test_bpf.o obj-$(CONFIG_TEST_FIRMWARE) += test_firmware.o obj-$(CONFIG_TEST_SYSCTL) += test_sysctl.o obj-$(CONFIG_TEST_HASH) += test_hash.o test_siphash.o obj-$(CONFIG_TEST_IDA) += test_ida.o obj-$(CONFIG_TEST_KASAN) += test_kasan.o CFLAGS_test_kasan.o += -fno-builtin obj-$(CONFIG_TEST_UBSAN) += test_ubsan.o Loading lib/test_ida.c 0 → 100644 +45 −0 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0+ /* * test_ida.c: Test the IDA API * Copyright (c) 2016-2018 Microsoft Corporation * Copyright (c) 2018 Oracle Corporation * Author: Matthew Wilcox <willy@infradead.org> */ #include <linux/idr.h> #include <linux/module.h> static unsigned int tests_run; static unsigned int tests_passed; #ifdef __KERNEL__ void ida_dump(struct ida *ida) { } #endif #define IDA_BUG_ON(ida, x) do { \ tests_run++; \ if (x) { \ ida_dump(ida); \ dump_stack(); \ } else { \ tests_passed++; \ } \ } while (0) static int ida_checks(void) { DEFINE_IDA(ida); IDA_BUG_ON(&ida, !ida_is_empty(&ida)); printk("IDA: %u of %u tests passed\n", tests_passed, tests_run); return (tests_run != tests_passed) ? 0 : -EINVAL; } static void ida_exit(void) { } module_init(ida_checks); module_exit(ida_exit); MODULE_AUTHOR("Matthew Wilcox <willy@infradead.org>"); MODULE_LICENSE("GPL"); tools/testing/radix-tree/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ targets: generated/map-shift.h $(TARGETS) main: $(OFILES) idr-test.o: ../../../lib/test_ida.c idr-test: idr-test.o $(CORE_OFILES) multiorder: multiorder.o $(CORE_OFILES) Loading tools/testing/radix-tree/idr-test.c +19 −3 Original line number Diff line number Diff line Loading @@ -309,6 +309,15 @@ void idr_checks(void) idr_u32_test(0); } #define module_init(x) #define module_exit(x) #define MODULE_AUTHOR(x) #define MODULE_LICENSE(x) #define dump_stack() assert(0) void ida_dump(struct ida *); #include "../../../lib/test_ida.c" /* * Check that we get the correct error when we run out of memory doing * allocations. To ensure we run out of memory, just "forget" to preload. Loading Loading @@ -488,7 +497,7 @@ void ida_simple_get_remove_test(void) ida_destroy(&ida); } void ida_checks(void) void user_ida_checks(void) { DEFINE_IDA(ida); int id; Loading Loading @@ -582,12 +591,19 @@ void ida_thread_tests(void) pthread_join(threads[i], NULL); } void ida_tests(void) { user_ida_checks(); ida_checks(); ida_exit(); ida_thread_tests(); } int __weak main(void) { radix_tree_init(); idr_checks(); ida_checks(); ida_thread_tests(); ida_tests(); radix_tree_cpu_dead(1); rcu_barrier(); if (nr_allocated) Loading Loading
lib/Kconfig.debug +3 −0 Original line number Diff line number Diff line Loading @@ -1827,6 +1827,9 @@ config TEST_HASH This is intended to help people writing architecture-specific optimized versions. If unsure, say N. config TEST_IDA tristate "Perform selftest on IDA functions" config TEST_PARMAN tristate "Perform selftest on priority array manager" default n Loading
lib/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ obj-$(CONFIG_TEST_BPF) += test_bpf.o obj-$(CONFIG_TEST_FIRMWARE) += test_firmware.o obj-$(CONFIG_TEST_SYSCTL) += test_sysctl.o obj-$(CONFIG_TEST_HASH) += test_hash.o test_siphash.o obj-$(CONFIG_TEST_IDA) += test_ida.o obj-$(CONFIG_TEST_KASAN) += test_kasan.o CFLAGS_test_kasan.o += -fno-builtin obj-$(CONFIG_TEST_UBSAN) += test_ubsan.o Loading
lib/test_ida.c 0 → 100644 +45 −0 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0+ /* * test_ida.c: Test the IDA API * Copyright (c) 2016-2018 Microsoft Corporation * Copyright (c) 2018 Oracle Corporation * Author: Matthew Wilcox <willy@infradead.org> */ #include <linux/idr.h> #include <linux/module.h> static unsigned int tests_run; static unsigned int tests_passed; #ifdef __KERNEL__ void ida_dump(struct ida *ida) { } #endif #define IDA_BUG_ON(ida, x) do { \ tests_run++; \ if (x) { \ ida_dump(ida); \ dump_stack(); \ } else { \ tests_passed++; \ } \ } while (0) static int ida_checks(void) { DEFINE_IDA(ida); IDA_BUG_ON(&ida, !ida_is_empty(&ida)); printk("IDA: %u of %u tests passed\n", tests_passed, tests_run); return (tests_run != tests_passed) ? 0 : -EINVAL; } static void ida_exit(void) { } module_init(ida_checks); module_exit(ida_exit); MODULE_AUTHOR("Matthew Wilcox <willy@infradead.org>"); MODULE_LICENSE("GPL");
tools/testing/radix-tree/Makefile +1 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ targets: generated/map-shift.h $(TARGETS) main: $(OFILES) idr-test.o: ../../../lib/test_ida.c idr-test: idr-test.o $(CORE_OFILES) multiorder: multiorder.o $(CORE_OFILES) Loading
tools/testing/radix-tree/idr-test.c +19 −3 Original line number Diff line number Diff line Loading @@ -309,6 +309,15 @@ void idr_checks(void) idr_u32_test(0); } #define module_init(x) #define module_exit(x) #define MODULE_AUTHOR(x) #define MODULE_LICENSE(x) #define dump_stack() assert(0) void ida_dump(struct ida *); #include "../../../lib/test_ida.c" /* * Check that we get the correct error when we run out of memory doing * allocations. To ensure we run out of memory, just "forget" to preload. Loading Loading @@ -488,7 +497,7 @@ void ida_simple_get_remove_test(void) ida_destroy(&ida); } void ida_checks(void) void user_ida_checks(void) { DEFINE_IDA(ida); int id; Loading Loading @@ -582,12 +591,19 @@ void ida_thread_tests(void) pthread_join(threads[i], NULL); } void ida_tests(void) { user_ida_checks(); ida_checks(); ida_exit(); ida_thread_tests(); } int __weak main(void) { radix_tree_init(); idr_checks(); ida_checks(); ida_thread_tests(); ida_tests(); radix_tree_cpu_dead(1); rcu_barrier(); if (nr_allocated) Loading