Whamcloud - gitweb
LU-8560 libcfs: handle stacktrace function address() change 07/22207/2
authorJames Simmons <uja.ornl@yahoo.com>
Sun, 28 Aug 2016 20:16:56 +0000 (16:16 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 8 Sep 2016 02:06:34 +0000 (02:06 +0000)
Starting in linux kernel 4.6 the address() function
from struct stacktrace now return an int. Update
Lustre to handle this change.

Change-Id: I7d14c9134de3ae5642e2cad7d1d3829eb4ee9c50
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-on: http://review.whamcloud.com/22207
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Frank Zago <fzago@cray.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
libcfs/autoconf/lustre-libcfs.m4
libcfs/libcfs/linux/linux-debug.c

index d7e1a45..b559798 100644 (file)
@@ -339,6 +339,25 @@ crypto_hash_helpers, [
 ]) # LIBCFS_CRYPTO_HASH_HELPERS
 
 #
+# LIBCFS_STACKTRACE_OPS_ADDRESS_RETURN_INT
+#
+# linux 4.6 kernel changed stacktrace_ops address to return an int
+#
+AC_DEFUN([LIBCFS_STACKTRACE_OPS_ADDRESS_RETURN_INT], [
+LB_CHECK_COMPILE([if 'struct stacktrace_ops' address function returns an int],
+stacktrace_ops_address_return_int, [
+       #include <asm/stacktrace.h>
+],[
+       int rc;
+
+       rc = ((struct stacktrace_ops *)0)->address(NULL, 0, 0);
+],[
+       AC_DEFINE(STACKTRACE_OPS_ADDRESS_RETURN_INT, 1,
+               ['struct stacktrace_ops' address function returns an int])
+])
+]) # LIBCFS_STACKTRACE_OPS_ADDRESS_RETURN_INT
+
+#
 # LIBCFS_PROG_LINUX
 #
 # LibCFS linux kernel checks
@@ -380,6 +399,8 @@ LIBCFS_HAVE_TOPOLOGY_SIBLING_CPUMASK
 LIBCFS_FPU_API
 # 4.5
 LIBCFS_CRYPTO_HASH_HELPERS
+# 4.6
+LIBCFS_STACKTRACE_OPS_ADDRESS_RETURN_INT
 ]) # LIBCFS_PROG_LINUX
 
 #
index 92d5361..7d97fb5 100644 (file)
@@ -208,13 +208,21 @@ static int print_trace_stack(void *data, char *name)
        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 = {