From ffb2b46ed7eda42530596df3d52f76250d53e506 Mon Sep 17 00:00:00 2001 From: Chris Horn Date: Wed, 22 May 2019 11:21:14 -0500 Subject: [PATCH 1/1] LU-12323 libcfs: check if save_stack_trace_tsk is exported Lustre 2.12 commit afedf9343686504c89f2e28cf6133540166f2347 introduced the use of save_stack_trace_tsk, but this symbol is not exported for all architectures. When it's possible we can use save_stack_trace instead. Otherwise skip printing stack trace. Cray-bug-id: LUS-7352 Test-Parameters: clientarch=aarch64 Signed-off-by: Chris Horn Change-Id: I142b542f5c5672abbad461a621aedd1e49db1bdd Reviewed-on: https://review.whamcloud.com/34937 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Yang Sheng Reviewed-by: Andreas Dilger Reviewed-by: Shaun Tancheff Reviewed-by: James Simmons Reviewed-by: Oleg Drokin --- libcfs/autoconf/lustre-libcfs.m4 | 19 +++++++++++++++++++ libcfs/libcfs/linux/linux-debug.c | 10 ++++++++++ 2 files changed, 29 insertions(+) diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4 index 3f87822..543b989 100644 --- a/libcfs/autoconf/lustre-libcfs.m4 +++ b/libcfs/autoconf/lustre-libcfs.m4 @@ -1023,6 +1023,24 @@ define_timer, [ ]) # LIBCFS_DEFINE_TIMER # +# LIBCFS_EXPORT_SAVE_STACK_TRACE_TSK +# +# Kernel 2.6.27 commit 8594698ebddeef5443b7da8258ae33b3eaca61d5 +# exported save_stack_trace_tsk for x86. +# Kernel 2.6.27 commit 01f4b8b8b8db09b88be7df7e51192e4e678b69d3 +# exported save_stack_trace_tsk for powerpc +# Kernel 4.13 commit e27c7fa015d61c8be6a2c32b2144aad2ae6ec975 +# exported save_stack_trace_tsk for arm64 +# Kernel 4.14 commit 9a3dc3186fc3795e076a4122da9e0258651a9631 +# exported save_stack_trace_tsk for arm +# +AC_DEFUN([LIBCFS_EXPORT_SAVE_STACK_TRACE_TSK], [ +LB_CHECK_EXPORT([save_stack_trace_tsk], [arch/$SUBARCH/kernel/stacktrace.c], + [AC_DEFINE(HAVE_SAVE_STACK_TRACE_TSK, 1, + [save_stack_trace_tsk is exported])]) +]) # LIBCFS_EXPORT_SAVE_STACK_TRACE_TSK + +# # LIBCFS_TIMER_SETUP # # Kernel version 4.15 commit e99e88a9d2b067465adaa9c111ada99a041bef9a @@ -1178,6 +1196,7 @@ LIBCFS_WAIT_QUEUE_ENTRY # 4.14 LIBCFS_DEFINE_TIMER LIBCFS_NEW_KERNEL_WRITE +LIBCFS_EXPORT_SAVE_STACK_TRACE_TSK # 4.15 LIBCFS_TIMER_SETUP # 4.16 diff --git a/libcfs/libcfs/linux/linux-debug.c b/libcfs/libcfs/linux/linux-debug.c index 46fbc29..aa01487 100644 --- a/libcfs/libcfs/linux/linux-debug.c +++ b/libcfs/libcfs/linux/linux-debug.c @@ -115,6 +115,16 @@ EXPORT_SYMBOL(lbug_with_loc); #ifdef CONFIG_STACKTRACE +#ifndef HAVE_SAVE_STACK_TRACE_TSK +#define save_stack_trace_tsk(tsk, trace) \ +do { \ + if (tsk == current) \ + save_stack_trace(trace); \ + else \ + pr_info("No stack, save_stack_trace_tsk() not exported\n"); \ +} while (0) +#endif + #define MAX_ST_ENTRIES 100 static DEFINE_SPINLOCK(st_lock); -- 1.8.3.1