diff options
Diffstat (limited to 'src/kernel_iface.c')
-rw-r--r-- | src/kernel_iface.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/kernel_iface.c b/src/kernel_iface.c index 33d56df..4ded334 100644 --- a/src/kernel_iface.c +++ b/src/kernel_iface.c | |||
@@ -75,6 +75,21 @@ void exit_np(void) | |||
75 | } | 75 | } |
76 | } | 76 | } |
77 | 77 | ||
78 | int exit_np_trace(void) | ||
79 | { | ||
80 | if (likely(ctrl_page != NULL) && | ||
81 | ctrl_page->sched.np.flag && | ||
82 | !(--ctrl_page->sched.np.flag)) { | ||
83 | __sync_synchronize(); | ||
84 | if (ctrl_page->sched.np.preempt) { | ||
85 | ctrl_page->ts_syscall_start = (uint64_t) get_cycles(); | ||
86 | sched_yield(); | ||
87 | return 1; | ||
88 | } | ||
89 | } | ||
90 | return 0; | ||
91 | } | ||
92 | |||
78 | int requested_to_preempt(void) | 93 | int requested_to_preempt(void) |
79 | { | 94 | { |
80 | return (likely(ctrl_page != NULL) && ctrl_page->sched.np.preempt); | 95 | return (likely(ctrl_page != NULL) && ctrl_page->sched.np.preempt); |