Commit 9bf2eed9 authored by Brendan Higgins's avatar Brendan Higgins Committed by Shuah Khan
Browse files

kunit: add support for kunit_suites that reference init code



Add support for a new kind of kunit_suite registration macro called
kunit_test_init_section_suite(); this new registration macro allows the
registration of kunit_suites that reference functions marked __init and
data marked __initdata.

Signed-off-by: default avatarBrendan Higgins <brendanhiggins@google.com>
Tested-by: default avatarMartin Fernandez <martin.fernandez@eclypsium.com>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
Reviewed-by: default avatarDavid Gow <davidgow@google.com>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent 59729170
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -308,6 +308,34 @@ static inline int kunit_run_all_tests(void)

#define kunit_test_suite(suite)	kunit_test_suites(&suite)

/**
 * kunit_test_init_section_suites() - used to register one or more &struct
 *				      kunit_suite containing init functions or
 *				      init data.
 *
 * @__suites: a statically allocated list of &struct kunit_suite.
 *
 * This functions identically as &kunit_test_suites() except that it suppresses
 * modpost warnings for referencing functions marked __init or data marked
 * __initdata; this is OK because currently KUnit only runs tests upon boot
 * during the init phase or upon loading a module during the init phase.
 *
 * NOTE TO KUNIT DEVS: If we ever allow KUnit tests to be run after boot, these
 * tests must be excluded.
 *
 * The only thing this macro does that's different from kunit_test_suites is
 * that it suffixes the array and suite declarations it makes with _probe;
 * modpost suppresses warnings about referencing init data for symbols named in
 * this manner.
 */
#define kunit_test_init_section_suites(__suites...)			\
	__kunit_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe),	\
			    CONCATENATE(__UNIQUE_ID(suites), _probe),	\
			    ##__suites)

#define kunit_test_init_section_suite(suite)	\
	kunit_test_init_section_suites(&suite)

#define kunit_suite_for_each_test_case(suite, test_case)		\
	for (test_case = suite->test_cases; test_case->run_case; test_case++)