BNX2X: disables TPA
[akaros.git] / kern / src / ktest / ktest.c
1 #include <stdbool.h>
2 #include <ktest.h>
3 #include <sys/queue.h>
4
5 /* Global string used to report info about the last completed test */
6 char ktest_msg[1024];
7
8 /* Global linked list used to store registered ktest suites */
9 SLIST_HEAD(suiteq, ktest_suite);
10 static struct suiteq ktest_suiteq = SLIST_HEAD_INITIALIZER(ktest_suiteq);
11
12 void register_ktest_suite(struct ktest_suite *suite)
13 {
14         SLIST_INSERT_HEAD(&ktest_suiteq, suite, link);
15 }
16
17 void run_registered_ktest_suites()
18 {
19         struct ktest_suite *suite = NULL;
20         SLIST_FOREACH(suite, &ktest_suiteq, link) {
21                 run_ktest_suite(suite);
22         }
23 }
24
25 void run_ktest_suite(struct ktest_suite *suite)
26 {
27         printk("<-- BEGIN_KERNEL_%s_TESTS -->\n", suite->name);
28
29         for (int i=0; i<suite->num_ktests; i++) {
30                 struct ktest *test = &suite->ktests[i];
31                 if (test->enabled) {
32                         uint64_t start = read_tsc();
33                         bool result = test->func();
34                         uint64_t end = read_tsc();
35                         uint64_t et_us = tsc2usec(end - start) % 1000000;
36                         uint64_t et_s = tsc2sec(end - start);
37
38                         char fmt[] = "\t%s   [%s](%llu.%06llus)   %s\n";
39                         if (result) {
40                                 printk(fmt, "PASSED", test->name, et_s, et_us, "");
41                         } else {
42                                 printk(fmt, "FAILED", test->name, et_s, et_us, ktest_msg);
43                         }
44                 } else {
45                         printk("\tDISABLED [%s]\n", test->name);
46                 }
47         }
48
49         printk("<-- END_KERNEL_%s_TESTS -->\n", suite->name);
50 }
51