From: Matthew Wilcox (Oracle) Date: Fri, 21 Jun 2024 19:01:14 +0000 (-0400) Subject: tools: Add support for running rosebush tests in userspace X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=f194ff9c78e75f5b2f74eab9cdc7d29970e7e295;p=users%2Fwilly%2Fpagecache.git tools: Add support for running rosebush tests in userspace Enable make -C tools/testing/radix-tree. Much easier to debug than an in-kernel module. Signed-off-by: Matthew Wilcox (Oracle) --- diff --git a/tools/include/linux/rosebush.h b/tools/include/linux/rosebush.h new file mode 100644 index 0000000000000..3f12f4288250e --- /dev/null +++ b/tools/include/linux/rosebush.h @@ -0,0 +1 @@ +#include "../../../include/linux/rosebush.h" diff --git a/tools/testing/radix-tree/.gitignore b/tools/testing/radix-tree/.gitignore index 49bccb90c35ba..fb154f26bdabd 100644 --- a/tools/testing/radix-tree/.gitignore +++ b/tools/testing/radix-tree/.gitignore @@ -9,3 +9,4 @@ radix-tree.c xarray maple ma_xa_benchmark +rosebush diff --git a/tools/testing/radix-tree/Makefile b/tools/testing/radix-tree/Makefile index 7527f738b4a14..982ff4b7fdeb4 100644 --- a/tools/testing/radix-tree/Makefile +++ b/tools/testing/radix-tree/Makefile @@ -4,7 +4,7 @@ CFLAGS += -I. -I../../include -I../../../lib -g -Og -Wall \ -D_LGPL_SOURCE -fsanitize=address -fsanitize=undefined LDFLAGS += -fsanitize=address -fsanitize=undefined LDLIBS+= -lpthread -lurcu -TARGETS = main idr-test multiorder xarray maple +TARGETS = main idr-test multiorder xarray maple rosebush CORE_OFILES := xarray.o radix-tree.o idr.o linux.o test.o find_bit.o bitmap.o \ slab.o maple.o OFILES = main.o $(CORE_OFILES) regression1.o regression2.o regression3.o \ @@ -36,6 +36,8 @@ xarray: $(CORE_OFILES) maple: $(CORE_OFILES) +rosebush: $(CORE_OFILES) + multiorder: multiorder.o $(CORE_OFILES) clean: @@ -62,6 +64,8 @@ xarray.o: ../../../lib/xarray.c ../../../lib/test_xarray.c maple.o: ../../../lib/maple_tree.c ../../../lib/test_maple_tree.c +rosebush.o: ../../../lib/rosebush.c ../../../lib/test_rosebush.c + generated/map-shift.h: @if ! grep -qws $(SHIFT) generated/map-shift.h; then \ echo "#define XA_CHUNK_SHIFT $(SHIFT)" > \ diff --git a/tools/testing/radix-tree/kunit/test.h b/tools/testing/radix-tree/kunit/test.h new file mode 100644 index 0000000000000..0805e3695762d --- /dev/null +++ b/tools/testing/radix-tree/kunit/test.h @@ -0,0 +1,20 @@ +struct kunit { +}; + +struct kunit_case { + void (*run_case)(struct kunit *test); +}; + +struct kunit_suite { + char *name; + struct kunit_case *test_cases; +}; + +#define KUNIT_CASE(test_name) { .run_case = test_name, } +#define kunit_test_suite(x) + +#define KUNIT_EXPECT_EQ(test, left, right) \ + KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, NULL) +#define KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, fmt, ...) \ + assert(left == right) + diff --git a/tools/testing/radix-tree/rosebush.c b/tools/testing/radix-tree/rosebush.c new file mode 100644 index 0000000000000..51703737833e4 --- /dev/null +++ b/tools/testing/radix-tree/rosebush.c @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * rosebush.c: Userspace testing for rosebush test-suite + * Copyright (c) 2024 Oracle Corporation + * Author: Matthew Wilcox + */ + +#include "test.h" +#include +#include + +#define module_init(x) +#define module_exit(x) +#define MODULE_AUTHOR(x) +#define MODULE_LICENSE(x) +#define dump_stack() assert(0) + +#include "../../../lib/rosebush.c" +#include "../../../lib/test_rosebush.c" + +int __weak main(void) +{ + struct kunit test; + int i; + + assert(rosebush_suite.test_cases == rosebush_cases); + + for (i = 0; i < ARRAY_SIZE(rosebush_cases); i++) { + if (!rosebush_cases[i].run_case) + continue; + printf("i = %d %p\n", i, rosebush_cases[i].run_case); + rosebush_cases[i].run_case(&test); + } + + return 0; +}