7-ps2_keyboard.md and 8-multitasking.md (#29)
[lunaix-os.git] / lunaix-os / includes / lunaix / kpreempt.h
1 #ifndef __LUNAIX_KPREEMPT_H
2 #define __LUNAIX_KPREEMPT_H
3
4 #include <sys/abi.h>
5
6 #define _preemptible __attribute__((section(".kf.preempt")))
7
8 #define ensure_preempt_caller()                                 \
9     do {                                                        \
10         extern int __kf_preempt_start[];                        \
11         extern int __kf_preempt_end[];                          \
12         ptr_t _retaddr = abi_get_retaddr();                     \
13         assert_msg((ptr_t)__kf_preempt_start <= _retaddr        \
14                     && _retaddr < (ptr_t)__kf_preempt_end,      \
15                    "caller must be kernel preemptible");        \
16     } while(0)
17
18 #endif /* __LUNAIX_KPREEMPT_H */