19 #ifndef _COBALT_KERNEL_ASSERT_H
20 #define _COBALT_KERNEL_ASSERT_H
22 #include <cobalt/kernel/trace.h>
23 #include <cobalt/kernel/ancillaries.h>
25 #define XENO_INFO KERN_INFO "[Xenomai] "
26 #define XENO_WARN KERN_WARNING "[Xenomai] "
27 #define XENO_ERR KERN_ERR "[Xenomai] "
29 #define XENO_DEBUG(__subsys) \
30 (CONFIG_XENO_OPT_DEBUG_##__subsys > 0)
32 #define XENO_ASSERT(__subsys, __cond) \
34 int __ret = !XENO_DEBUG(__subsys) || (__cond); \
35 if (unlikely(!__ret)) \
36 __xnsys_assert_failed(__FILE__, __LINE__, (#__cond)); \
40 #define XENO_BUGON(__subsys, __cond) \
42 if (unlikely(XENO_DEBUG(__subsys) && (__cond))) \
43 xnsys_fatal("bug at %s:%d (%s)", \
44 __FILE__, __LINE__, (#__cond)); \
47 #define XENO_BUG(__subsys) XENO_BUGON(__subsys, 1)
49 #define XENO_WARNON(__subsys, __cond) \
51 if (unlikely(XENO_DEBUG(__subsys) && (__cond))) \
52 printk(XENO_WARN "assertion failed at %s:%d (%s)", \
53 __FILE__, __LINE__, (#__cond)); \
56 #ifndef CONFIG_XENO_OPT_DEBUG_COBALT
57 #define CONFIG_XENO_OPT_DEBUG_COBALT 0
60 #ifndef CONFIG_XENO_OPT_DEBUG_CONTEXT
61 #define CONFIG_XENO_OPT_DEBUG_CONTEXT 0
64 #ifndef CONFIG_XENO_OPT_DEBUG_LOCKING
65 #define CONFIG_XENO_OPT_DEBUG_LOCKING 0
68 #ifndef CONFIG_XENO_OPT_DEBUG_USER
69 #define CONFIG_XENO_OPT_DEBUG_USER 0
72 #define primary_mode_only() XENO_BUGON(CONTEXT, ipipe_root_p)
73 #define secondary_mode_only() XENO_BUGON(CONTEXT, !ipipe_root_p)
74 #define interrupt_only() XENO_BUGON(CONTEXT, !xnsched_interrupt_p())
75 #define realtime_cpu_only() XENO_BUGON(CONTEXT, !xnsched_supported_cpu(ipipe_processor_id()))
76 #define thread_only() XENO_BUGON(CONTEXT, xnsched_interrupt_p())
77 #if XENO_DEBUG(LOCKING)
78 #define atomic_only() XENO_BUGON(CONTEXT, (xnlock_is_owner(&nklock) && hard_irqs_disabled()) == 0)
79 #define preemptible_only() XENO_BUGON(CONTEXT, xnlock_is_owner(&nklock) || hard_irqs_disabled())
81 #define atomic_only() XENO_BUGON(CONTEXT, hard_irqs_disabled() == 0)
82 #define preemptible_only() XENO_BUGON(CONTEXT, hard_irqs_disabled() != 0)
85 void __xnsys_assert_failed(
const char *file,
int line,
const char *msg);
87 void __xnsys_fatal(
const char *format, ...);
89 #define xnsys_fatal(__fmt, __args...) nkpanic(KERN_ERR __fmt, ##__args)
91 extern void (*nkpanic)(
const char *format, ...);