From: Li Xi Date: Thu, 27 Feb 2014 17:02:12 +0000 (-0500) Subject: LU-4199 libcfs: add wrapper of dump_trace() X-Git-Tag: 2.5.57~28 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F72%2F8872%2F5;p=fs%2Flustre-release.git LU-4199 libcfs: add wrapper of dump_trace() dump_trace() is a X86 specific function. It will cause compilation failure if the architecture is not X86. A more general function dump_stack() should be called under that environment. Signed-off-by: Li Xi Signed-off-by: James Simmons Change-Id: I8a5fffa6dec15dc8c779a22e24c10b364c77f9a0 Reviewed-on: http://review.whamcloud.com/8872 Tested-by: Jenkins Reviewed-by: Bob Glossman Tested-by: Maloo Reviewed-by: Jian Yu Reviewed-by: Dmitry Eremin Reviewed-by: Jinshan Xiong Reviewed-by: Andreas Dilger --- diff --git a/libcfs/libcfs/linux/linux-debug.c b/libcfs/libcfs/linux/linux-debug.c index fe93f0c..3fb9797 100644 --- a/libcfs/libcfs/linux/linux-debug.c +++ b/libcfs/libcfs/linux/linux-debug.c @@ -184,6 +184,7 @@ void lbug_with_loc(struct libcfs_debug_msg_data *msgdata) #ifdef __KERNEL__ +#ifdef CONFIG_X86 #include #include @@ -229,6 +230,28 @@ static const struct stacktrace_ops print_trace_ops = { #endif }; +static void libcfs_call_trace(struct task_struct *tsk) +{ + dump_trace(tsk, NULL, NULL, +#ifdef HAVE_DUMP_TRACE_ADDRESS + 0, +#endif /* HAVE_DUMP_TRACE_ADDRESS */ + &print_trace_ops, NULL); + printk("\n"); +} + +#else /* !CONFIG_X86 */ + +static void libcfs_call_trace(struct task_struct *tsk) +{ + if ((tsk == NULL) || (tsk == current)) + dump_stack(); + else + CWARN("can't show stack: kernel doesn't export show_task\n"); +} + +#endif /* CONFIG_X86 */ + void libcfs_debug_dumpstack(struct task_struct *tsk) { /* dump_stack() */ @@ -238,12 +261,7 @@ void libcfs_debug_dumpstack(struct task_struct *tsk) printk("Pid: %d, comm: %.20s\n", tsk->pid, tsk->comm); /* show_trace_log_lvl() */ printk("\nCall Trace:\n"); - dump_trace(tsk, NULL, NULL, -#ifdef HAVE_DUMP_TRACE_ADDRESS - 0, -#endif /* HAVE_DUMP_TRACE_ADDRESS */ - &print_trace_ops, NULL); - printk("\n"); + libcfs_call_trace(tsk); } struct task_struct *libcfs_current(void) @@ -268,10 +286,10 @@ static int panic_notifier(struct notifier_block *self, unsigned long unused1, if (in_interrupt()) { cfs_trace_debug_print(); } else { -# ifdef HAVE_KERNEL_LOCKED +#ifdef HAVE_KERNEL_LOCKED while (kernel_locked()) unlock_kernel(); -# endif +#endif libcfs_debug_dumplog_internal((void *)(long)current_pid()); } #endif