*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
*
* GPL HEADER END
*/
# define DEBUG_SUBSYSTEM S_LNET
#include <libcfs/libcfs.h>
-#include <libcfs/linux/portals_compat25.h>
#include "tracefile.h"
libcfs_run_upcall (argv);
}
+EXPORT_SYMBOL(libcfs_run_lbug_upcall);
/* coverity[+kill] */
void lbug_with_loc(struct libcfs_debug_msg_data *msgdata)
while (1)
schedule();
}
+EXPORT_SYMBOL(lbug_with_loc);
-#ifdef __KERNEL__
-
+#ifdef CONFIG_X86
#include <linux/nmi.h>
#include <asm/stacktrace.h>
return 0;
}
-static void print_trace_address(void *data, unsigned long addr, int reliable)
+#ifdef STACKTRACE_OPS_ADDRESS_RETURN_INT
+static int
+#else
+static void
+#endif
+print_trace_address(void *data, unsigned long addr, int reliable)
{
char fmt[32];
touch_nmi_watchdog();
sprintf(fmt, " [<%016lx>] %s%%s\n", addr, reliable ? "": "? ");
__print_symbol(fmt, addr);
+#ifdef STACKTRACE_OPS_ADDRESS_RETURN_INT
+ return 0;
+#endif
}
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() */
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);
}
+EXPORT_SYMBOL(libcfs_debug_dumpstack);
struct task_struct *libcfs_current(void)
{
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
{
atomic_notifier_chain_unregister(&panic_notifier_list, &libcfs_panic_notifier);
}
-
-EXPORT_SYMBOL(libcfs_debug_dumpstack);
-EXPORT_SYMBOL(libcfs_current);
-
-#endif /* __KERNEL__ */
-
-EXPORT_SYMBOL(libcfs_run_upcall);
-EXPORT_SYMBOL(libcfs_run_lbug_upcall);
-EXPORT_SYMBOL(lbug_with_loc);