M. Koehrer wrote: > Hi Philippe, > > I have extracted that part. However this very address is not available. > I have placed a couple of lines before and after that address. > > Regards > > Mathias > PS: I will continue on Monday with the tests.... > If you happen to do so, please give this patch a try. It's an experiment to include I-pipe tracer information in kernel oops reports. For this purpose, enable CONFIG_IPIPE_TRACE_MCOUNT, CONFIG_IPIPE_TRACE_ENABLE, and CONFIG_IPIPE_TRACE_IRQSOFF. Then trigger the oops. Maybe we get more information about the function call history. Thanks, Jan --- arch/i386/mm/fault.c | 5 +++++ include/linux/ipipe_trace.h | 7 ++++++- kernel/ipipe/tracer.c | 8 ++++++++ lib/bust_spinlocks.c | 5 +++++ 4 files changed, 24 insertions(+), 1 deletion(-) Index: linux-2.6.20/arch/i386/mm/fault.c =================================================================== --- linux-2.6.20.orig/arch/i386/mm/fault.c +++ linux-2.6.20/arch/i386/mm/fault.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -68,9 +69,13 @@ void bust_spinlocks(int yes) int loglevel_save = console_loglevel; if (yes) { + ipipe_trace_panic_freeze(); oops_in_progress = 1; return; } + + ipipe_trace_panic_dump(); + #ifdef CONFIG_VT unblank_screen(); #endif Index: linux-2.6.20/include/linux/ipipe_trace.h =================================================================== --- linux-2.6.20.orig/include/linux/ipipe_trace.h +++ linux-2.6.20/include/linux/ipipe_trace.h @@ -39,6 +39,11 @@ int ipipe_trace_frozen_reset(void); void ipipe_trace_panic_freeze(void); void ipipe_trace_panic_dump(void); -#endif /* CONFIG_IPIPE_TRACE */ +#else /* !CONFIG_IPIPE_TRACE */ + +static inline void ipipe_trace_panic_freeze(void) { } +static inline void ipipe_trace_panic_dump(void) { } + +#endif /* !CONFIG_IPIPE_TRACE */ #endif /* !__LINUX_IPIPE_H */ 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 @@ -565,6 +565,9 @@ void ipipe_trace_panic_freeze(void) unsigned long flags; int cpu_id; + if (!ipipe_trace_enable) + return; + ipipe_trace_enable = 0; local_irq_save_hw_notrace(flags); @@ -614,6 +617,9 @@ void ipipe_trace_panic_dump(void) int start, pos; char task_info[12]; + if (!panic_path) + return; + printk("I-pipe tracer log (%d points):\n", cnt); start = pos = WRAP_POINT_NO(panic_path->trace_pos-1); @@ -667,6 +673,8 @@ void ipipe_trace_panic_dump(void) } pos = WRAP_POINT_NO(pos - 1); } + + panic_path = NULL; } EXPORT_SYMBOL(ipipe_trace_panic_dump); Index: linux-2.6.20/lib/bust_spinlocks.c =================================================================== --- linux-2.6.20.orig/lib/bust_spinlocks.c +++ linux-2.6.20/lib/bust_spinlocks.c @@ -12,14 +12,19 @@ #include #include #include +#include void bust_spinlocks(int yes) { if (yes) { + ipipe_trace_panic_freeze(); oops_in_progress = 1; } else { int loglevel_save = console_loglevel; + + ipipe_trace_panic_dump(); + #ifdef CONFIG_VT unblank_screen(); #endif