On Thu, Nov 07, 2019 at 06:43:11PM -0800, Brendan Higgins wrote:
On Thu, Oct 17, 2019 at 11:09 AM Alan Maguire alan.maguire@oracle.com wrote:
Making kunit itself buildable as a module allows for "always-on" kunit configuration; specifying CONFIG_KUNIT=m means the module is built but only used when loaded. Kunit test modules will load kunit.ko as an implicit dependency, so simply running "modprobe my-kunit-tests" will load the tests along with the kunit module and run them.
Signed-off-by: Alan Maguire alan.maguire@oracle.com Signed-off-by: Knut Omang knut.omang@oracle.com
lib/kunit/Kconfig | 2 +- lib/kunit/Makefile | 4 +++- lib/kunit/test.c | 2 ++ lib/kunit/try-catch.c | 3 +++ 4 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/lib/kunit/Kconfig b/lib/kunit/Kconfig index 9ebd5e6..065aa16 100644 --- a/lib/kunit/Kconfig +++ b/lib/kunit/Kconfig @@ -3,7 +3,7 @@ #
menuconfig KUNIT
bool "KUnit - Enable support for unit tests"
tristate "KUnit - Enable support for unit tests" help Enables support for kernel unit tests (KUnit), a lightweight unit testing and mocking framework for the Linux kernel. These tests are
diff --git a/lib/kunit/Makefile b/lib/kunit/Makefile index 769d940..8e2635a 100644 --- a/lib/kunit/Makefile +++ b/lib/kunit/Makefile @@ -1,4 +1,6 @@ -obj-$(CONFIG_KUNIT) += test.o \ +obj-$(CONFIG_KUNIT) += kunit.o
+kunit-objs += test.o \ string-stream.o \ assert.o \ try-catch.o diff --git a/lib/kunit/test.c b/lib/kunit/test.c index e8b2443..c0ace36 100644 --- a/lib/kunit/test.c +++ b/lib/kunit/test.c @@ -523,3 +523,5 @@ void *kunit_find_symbol(const char *sym) return ERR_PTR(-ENOENT); } EXPORT_SYMBOL(kunit_find_symbol);
+MODULE_LICENSE("GPL"); diff --git a/lib/kunit/try-catch.c b/lib/kunit/try-catch.c index 1c1e9af..72fc8ed 100644 --- a/lib/kunit/try-catch.c +++ b/lib/kunit/try-catch.c @@ -31,6 +31,8 @@ static int kunit_generic_run_threadfn_adapter(void *data) complete_and_exit(try_catch->try_completion, 0); }
+KUNIT_VAR_SYMBOL(sysctl_hung_task_timeout_secs, unsigned long);
Can you just export sysctl_hung_task_timeout_secs?
I don't mean to make you redo all this work for one symbol twice, but I thought we agreed on just exposing this symbol, but in a namespace. It seemed like a good use case for that namespaced exporting thing that Luis was talking about. As I understood it, you would have to export it in the module that defines it, and then use the new MODULE_IMPORT_NS() macro here.
Also, I tried applying this and running this on kselftest/test and got the following build error:
In file included from lib/kunit/try-catch.c:10: lib/kunit/try-catch.c: In function ‘kunit_test_timeout’: ./include/kunit/test.h:132:19: error: lvalue required as unary ‘&’ operand kunit_##symbol = &(symbol) ^ lib/kunit/try-catch.c:57:2: note: in expansion of macro ‘KUNIT_INIT_VAR_SYMBOL’ KUNIT_INIT_VAR_SYMBOL(NULL, sysctl_hung_task_timeout_secs); ^~~~~~~~~~~~~~~~~~~~~
static unsigned long kunit_test_timeout(void) { unsigned long timeout_msecs; @@ -52,6 +54,7 @@ static unsigned long kunit_test_timeout(void) * For more background on this topic, see: * https://mike-bland.com/2011/11/01/small-medium-large.html */
KUNIT_INIT_VAR_SYMBOL(NULL, sysctl_hung_task_timeout_secs); if (sysctl_hung_task_timeout_secs) { /* * If sysctl_hung_task is active, just set the timeout to some
-- 1.8.3.1