]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Suppress incorrect objtool warnings
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 7 Dec 2017 18:28:50 +0000 (10:28 -0800)
committerGitHub <noreply@github.com>
Thu, 7 Dec 2017 18:28:50 +0000 (10:28 -0800)
Suppress incorrect warnings from versions of objtool which are not
aware of x86 EVEX prefix instructions used for AVX512.

  module/zfs/vdev_raidz_math_avx512bw.o: warning:
  objtool: <func+offset>: can't find jump dest instruction at .text

Reviewed-by: Don Brady <don.brady@delphix.com>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #6928

config/kernel-objtool.m4
include/sys/Makefile.am
include/sys/frame.h [new file with mode: 0644]
module/zcommon/zfs_fletcher_avx512.c
module/zfs/Makefile.in

index 94e7dda2d16d88b43e21590156ad1c2608a330d7..467329b2541e823001d007030d266caa87e3b117 100644 (file)
@@ -12,7 +12,30 @@ AC_DEFUN([ZFS_AC_KERNEL_OBJTOOL], [
                #endif
        ],[
                AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_KERNEL_OBJTOOL, 1, [kernel does stack verification])
+               AC_DEFINE(HAVE_KERNEL_OBJTOOL, 1,
+                   [kernel does stack verification])
+
+               ZFS_AC_KERNEL_STACK_FRAME_NON_STANDARD
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+])
+
+dnl #
+dnl # 4.6 API added STACK_FRAME_NON_STANDARD macro
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_STACK_FRAME_NON_STANDARD], [
+       AC_MSG_CHECKING([whether STACK_FRAME_NON_STANDARD is defined])
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/frame.h>
+       ],[
+               #if !defined(STACK_FRAME_NON_STANDARD)
+               CTASSERT(1);
+               #endif
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_STACK_FRAME_NON_STANDARD, 1,
+                  [STACK_FRAME_NON_STANDARD is defined])
        ],[
                AC_MSG_RESULT(no)
        ])
index d3835ca29f5aa610709375d3c867b0a03b218933..150004ddd6eb3bdfeaf9cf5b7e6642793252c03f 100644 (file)
@@ -35,6 +35,7 @@ COMMON_H = \
        $(top_srcdir)/include/sys/dsl_userhold.h \
        $(top_srcdir)/include/sys/edonr.h \
        $(top_srcdir)/include/sys/efi_partition.h \
+       $(top_srcdir)/include/sys/frame.h \
        $(top_srcdir)/include/sys/hkdf.h \
        $(top_srcdir)/include/sys/metaslab.h \
        $(top_srcdir)/include/sys/metaslab_impl.h \
diff --git a/include/sys/frame.h b/include/sys/frame.h
new file mode 100644 (file)
index 0000000..2865dbb
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * CDDL HEADER START
+ *
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright (C) 2017 by Lawrence Livermore National Security, LLC.
+ */
+
+#ifndef _SYS_FRAME_H
+#define        _SYS_FRAME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__KERNEL__) && defined(HAVE_STACK_FRAME_NON_STANDARD)
+#include <linux/frame.h>
+#else
+#define        STACK_FRAME_NON_STANDARD(func)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_FRAME_H */
index 2d28ffb112d7a15bd8d63071b9546087cf409bf5..ed93c11592334b0453ae5407615786b5d97c2f48 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <linux/simd_x86.h>
 #include <sys/byteorder.h>
+#include <sys/frame.h>
 #include <sys/spa_checksum.h>
 #include <zfs_fletcher.h>
 #include <strings.h>
@@ -107,6 +108,7 @@ fletcher_4_avx512f_native(fletcher_4_ctx_t *ctx, const void *buf, uint64_t size)
 
        kfpu_end();
 }
+STACK_FRAME_NON_STANDARD(fletcher_4_avx512f_native);
 
 static void
 fletcher_4_avx512f_byteswap(fletcher_4_ctx_t *ctx, const void *buf,
@@ -150,6 +152,7 @@ fletcher_4_avx512f_byteswap(fletcher_4_ctx_t *ctx, const void *buf,
 
        kfpu_end();
 }
+STACK_FRAME_NON_STANDARD(fletcher_4_avx512f_byteswap);
 
 static boolean_t
 fletcher_4_avx512f_valid(void)
index 606b0a47c8408560b9549cefd4eaf3e7278094f0..66acc536d82de53d713cd1af6a8af3a6c1fe00c7 100644 (file)
@@ -120,6 +120,11 @@ $(MODULE)-objs += dsl_destroy.o
 $(MODULE)-objs += dsl_userhold.o
 $(MODULE)-objs += qat_compress.o
 
+# Suppress incorrect warnings from versions of objtool which are not
+# aware of x86 EVEX prefix instructions used for AVX512.
+OBJECT_FILES_NON_STANDARD_vdev_raidz_math_avx512bw.o := y
+OBJECT_FILES_NON_STANDARD_vdev_raidz_math_avx512f.o := y
+
 $(MODULE)-$(CONFIG_X86) += vdev_raidz_math_sse2.o
 $(MODULE)-$(CONFIG_X86) += vdev_raidz_math_ssse3.o
 $(MODULE)-$(CONFIG_X86) += vdev_raidz_math_avx2.o