--- include/linux/ipipe_base.h | 11 +++++++++++ kernel/ipipe/core.c | 9 +++++---- kernel/ipipe/tracer.c | 2 ++ 3 files changed, 18 insertions(+), 4 deletions(-) Index: linux-2.6.20/include/linux/ipipe_base.h =================================================================== --- linux-2.6.20.orig/include/linux/ipipe_base.h +++ linux-2.6.20/include/linux/ipipe_base.h @@ -76,9 +76,20 @@ void __ipipe_unstall_root(void); void __ipipe_restore_root(unsigned long x); #ifdef CONFIG_IPIPE_DEBUG_CONTEXT + void ipipe_check_context(struct ipipe_domain *border_ipd); + +static inline void ipipe_disable_context_check(void) +{ + extern int __ipipe_context_check_enabled; + __ipipe_context_check_enabled = 0; +} + #else /* !CONFIG_IPIPE_DEBUG_CONTEXT */ + static inline void ipipe_check_context(struct ipipe_domain *border_ipd) { } +static inline void ipipe_disable_context_check(void) { } + #endif /* !CONFIG_IPIPE_DEBUG_CONTEXT */ #else /* !CONFIG_IPIPE */ Index: linux-2.6.20/kernel/ipipe/core.c =================================================================== --- linux-2.6.20.orig/kernel/ipipe/core.c +++ linux-2.6.20/kernel/ipipe/core.c @@ -1385,15 +1385,16 @@ void __init ipipe_init_proc(void) #endif /* CONFIG_PROC_FS */ #ifdef CONFIG_IPIPE_DEBUG_CONTEXT + +int __ipipe_context_check_enabled = 1; + void ipipe_check_context(struct ipipe_domain *border_ipd) { - static int check_hit; - if (likely(ipipe_current_domain->priority <= border_ipd->priority) || - check_hit) + !__ipipe_context_check_enabled) return; - check_hit = 1; + __ipipe_context_check_enabled = 0; ipipe_trace_panic_freeze(); ipipe_set_printk_sync(ipipe_current_domain); Index: linux-2.6.20/kernel/ipipe/tracer.c =================================================================== --- linux-2.6.20.orig/kernel/ipipe/tracer.c +++ linux-2.6.20/kernel/ipipe/tracer.c @@ -625,6 +625,8 @@ void ipipe_trace_panic_dump(void) if (!panic_path) return; + ipipe_disable_context_check(); + printk("I-pipe tracer log (%d points):\n", cnt); start = pos = WRAP_POINT_NO(panic_path->trace_pos-1);