Whamcloud - gitweb
- added LNET self test (landing b_self_test).
[fs/lustre-release.git] / lnet / selftest / module.c
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  */
4 #define DEBUG_SUBSYSTEM S_LNET
5
6 #include "selftest.h"
7
8
9 #define LST_INIT_NONE           0
10 #define LST_INIT_RPC            1
11 #define LST_INIT_FW             2
12 #define LST_INIT_CONSOLE        3
13
14 extern int lstcon_console_init(void);
15 extern int lstcon_console_fini(void);
16
17 static int lst_init_step = LST_INIT_NONE;
18
19 void
20 lnet_selftest_fini (void)
21 {
22         switch (lst_init_step) {
23 #ifdef __KERNEL__
24                 case LST_INIT_CONSOLE:
25                         lstcon_console_fini();
26 #endif
27                 case LST_INIT_FW:
28                         sfw_shutdown();
29                 case LST_INIT_RPC:
30                         srpc_shutdown();
31                 case LST_INIT_NONE:
32                         break;
33                 default:
34                         LBUG();
35         }
36         return;
37 }
38
39 int
40 lnet_selftest_init (void)
41 {
42         int     rc;
43
44         rc = srpc_startup();
45         if (rc != 0) {
46                 CERROR("LST can't startup rpc\n");
47                 goto error;
48         }
49         lst_init_step = LST_INIT_RPC;
50
51         rc = sfw_startup();
52         if (rc != 0) {
53                 CERROR("LST can't startup framework\n");
54                 goto error;
55         }
56         lst_init_step = LST_INIT_FW;
57
58 #ifdef __KERNEL__
59         rc = lstcon_console_init();
60         if (rc != 0) {
61                 CERROR("LST can't startup console\n");
62                 goto error;
63         }
64         lst_init_step = LST_INIT_CONSOLE;  
65 #endif
66
67         return 0;
68 error:
69         lnet_selftest_fini();
70         return rc;
71 }
72
73 #ifdef __KERNEL__
74
75 MODULE_DESCRIPTION("LNet Selftest");
76 MODULE_LICENSE("GPL");
77
78 cfs_module(lnet, "0.9.0", lnet_selftest_init, lnet_selftest_fini);
79
80 #else
81
82 int
83 selftest_wait_events (void)
84 {
85         int evts = 0;
86
87         for (;;) {
88                 /* Consume all pending events */
89                 while (srpc_check_event(0))
90                         evts++;
91                 evts += stt_check_events();
92                 evts += swi_check_events();
93                 if (evts != 0) break;
94
95                 /* Nothing happened, block for events */
96                 evts += srpc_check_event(stt_poll_interval());
97                 /* We may have blocked, check for expired timers */
98                 evts += stt_check_events();
99                 if (evts == 0) /* timed out and still no event */
100                         break;
101         }
102
103         return evts;
104 }
105
106 #endif