PCI 16x50 UART Controller, O2 Enablement (#39)
[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 \
7         __attribute__((section(".kf.preempt"))) no_inline
8
9 #define ensure_preempt_caller()                                 \
10     do {                                                        \
11         extern int __kf_preempt_start[];                        \
12         extern int __kf_preempt_end[];                          \
13         ptr_t _retaddr = abi_get_retaddr();                     \
14         assert_msg((ptr_t)__kf_preempt_start <= _retaddr        \
15                     && _retaddr < (ptr_t)__kf_preempt_end,      \
16                    "caller must be kernel preemptible");        \
17     } while(0)
18
19 #endif /* __LUNAIX_KPREEMPT_H */