fix dependency check logic cause config always disabled
[lunaix-os.git] / lunaix-os / kernel / process / switch.c
1 #include <lunaix/switch.h>
2 #include <lunaix/signal.h>
3 #include <lunaix/sched.h>
4 #include <lunaix/process.h>
5
6 extern void
7 signal_dispatch(struct signpost_result* result);
8
9 extern void
10 preempt_handle_stalled(struct signpost_result* result);
11
12 #define do_signpost(fn, result)                         \
13     do {                                                \
14         fn((result));                                   \
15         if ((result)->mode == SWITCH_MODE_FAST) {       \
16             thread_stats_update_leaving();              \
17             return (result)->stack;                     \
18         }                                               \
19         if ((result)->mode == SWITCH_MODE_GIVEUP) {     \
20             schedule();                                 \
21             fail("unexpected return");                  \
22         }                                               \
23     } while (0)
24
25 ptr_t
26 switch_signposting()
27 {
28     struct signpost_result result;
29
30     do_signpost(preempt_handle_stalled, &result);
31
32     do_signpost(signal_dispatch, &result);
33
34     thread_stats_update_leaving();
35
36     return 0;
37 }