mm/huge_memory.c: use head to emphasize the purpose of page
[linux-2.6-microblaze.git] / include / kunit / test.h
index dba4830..2dfb550 100644 (file)
@@ -12,6 +12,7 @@
 #include <kunit/assert.h>
 #include <kunit/try-catch.h>
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/types.h>
 
@@ -197,31 +198,47 @@ void kunit_init_test(struct kunit *test, const char *name);
 int kunit_run_tests(struct kunit_suite *suite);
 
 /**
- * kunit_test_suite() - used to register a &struct kunit_suite with KUnit.
+ * kunit_test_suites() - used to register one or more &struct kunit_suite
+ *                      with KUnit.
  *
- * @suite: a statically allocated &struct kunit_suite.
+ * @suites: a statically allocated list of &struct kunit_suite.
  *
- * Registers @suite with the test framework. See &struct kunit_suite for
+ * Registers @suites with the test framework. See &struct kunit_suite for
  * more information.
  *
- * NOTE: Currently KUnit tests are all run as late_initcalls; this means
+ * When builtin,  KUnit tests are all run as late_initcalls; this means
  * that they cannot test anything where tests must run at a different init
  * phase. One significant restriction resulting from this is that KUnit
  * cannot reliably test anything that is initialize in the late_init phase;
  * another is that KUnit is useless to test things that need to be run in
  * an earlier init phase.
  *
+ * An alternative is to build the tests as a module.  Because modules
+ * do not support multiple late_initcall()s, we need to initialize an
+ * array of suites for a module.
+ *
  * TODO(brendanhiggins@google.com): Don't run all KUnit tests as
  * late_initcalls.  I have some future work planned to dispatch all KUnit
  * tests from the same place, and at the very least to do so after
  * everything else is definitely initialized.
  */
-#define kunit_test_suite(suite)                                                       \
-       static int kunit_suite_init##suite(void)                               \
-       {                                                                      \
-               return kunit_run_tests(&suite);                                \
-       }                                                                      \
-       late_initcall(kunit_suite_init##suite)
+#define kunit_test_suites(...)                                         \
+       static struct kunit_suite *suites[] = { __VA_ARGS__, NULL};     \
+       static int kunit_test_suites_init(void)                         \
+       {                                                               \
+               unsigned int i;                                         \
+               for (i = 0; suites[i] != NULL; i++)                     \
+                       kunit_run_tests(suites[i]);                     \
+               return 0;                                               \
+       }                                                               \
+       late_initcall(kunit_test_suites_init);                          \
+       static void __exit kunit_test_suites_exit(void)                 \
+       {                                                               \
+               return;                                                 \
+       }                                                               \
+       module_exit(kunit_test_suites_exit)
+
+#define kunit_test_suite(suite)        kunit_test_suites(&suite)
 
 /*
  * Like kunit_alloc_resource() below, but returns the struct kunit_resource