summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrendan Higgins <brendanhiggins@google.com>2020-08-04 13:47:43 -0700
committerShuah Khan <skhan@linuxfoundation.org>2020-10-09 14:37:43 -0600
commit8c0d884986ba22f1020be9c02e41c030890ee8f2 (patch)
tree584279bf3ffd79e30f3ed99519e70931dc8c9543
parentaac35468ca20a3a0e75a24c13c0e31610727f120 (diff)
init: main: add KUnit to kernel init
Although we have not seen any actual examples where KUnit doesn't work because it runs in the late init phase of the kernel, it has been a concern for some time that this could potentially be an issue in the future. So, remove KUnit from init calls entirely, instead call directly from kernel_init() so that KUnit runs after late init. Co-developed-by: Alan Maguire <alan.maguire@oracle.com> Signed-off-by: Alan Maguire <alan.maguire@oracle.com> Signed-off-by: Brendan Higgins <brendanhiggins@google.com> Reviewed-by: Stephen Boyd <sboyd@kernel.org> Reviewed-by: Kees Cook <keescook@chromium.org> Reviewed-by: Luis Chamberlain <mcgrof@kernel.org> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
-rw-r--r--include/kunit/test.h9
-rw-r--r--init/main.c4
-rw-r--r--lib/kunit/executor.c4
3 files changed, 14 insertions, 3 deletions
diff --git a/include/kunit/test.h b/include/kunit/test.h
index d2d261f58259..7ea24466e49c 100644
--- a/include/kunit/test.h
+++ b/include/kunit/test.h
@@ -237,6 +237,15 @@ int __kunit_test_suites_init(struct kunit_suite * const * const suites);
void __kunit_test_suites_exit(struct kunit_suite **suites);
+#if IS_BUILTIN(CONFIG_KUNIT)
+int kunit_run_all_tests(void);
+#else
+static inline int kunit_run_all_tests(void)
+{
+ return 0;
+}
+#endif /* IS_BUILTIN(CONFIG_KUNIT) */
+
/**
* kunit_test_suites() - used to register one or more &struct kunit_suite
* with KUnit.
diff --git a/init/main.c b/init/main.c
index ae78fb68d231..232c8df465ee 100644
--- a/init/main.c
+++ b/init/main.c
@@ -107,6 +107,8 @@
#define CREATE_TRACE_POINTS
#include <trace/events/initcall.h>
+#include <kunit/test.h>
+
static int kernel_init(void *);
extern void init_IRQ(void);
@@ -1511,6 +1513,8 @@ static noinline void __init kernel_init_freeable(void)
do_basic_setup();
+ kunit_run_all_tests();
+
console_on_rootfs();
/*
diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c
index 7015e7328dce..4aab7f70a88c 100644
--- a/lib/kunit/executor.c
+++ b/lib/kunit/executor.c
@@ -11,7 +11,7 @@ extern struct kunit_suite * const * const __kunit_suites_end[];
#if IS_BUILTIN(CONFIG_KUNIT)
-static int kunit_run_all_tests(void)
+int kunit_run_all_tests(void)
{
struct kunit_suite * const * const *suites;
@@ -23,6 +23,4 @@ static int kunit_run_all_tests(void)
return 0;
}
-late_initcall(kunit_run_all_tests);
-
#endif /* IS_BUILTIN(CONFIG_KUNIT) */