diff options
author | Tony Hutter <[email protected]> | 2019-03-06 16:03:03 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2019-03-06 16:03:03 -0800 |
commit | becdcec7b9cd6b8beaa2273495b97c06de24e9e5 (patch) | |
tree | 39e6c2e78916928ff1b821356883376188bfd796 | |
parent | a73e8fdb93d24b885f0c38202a34da51013d674a (diff) |
kernel_fpu fixes
This patch fixes a few issues when detecting which kernel_fpu functions
are available.
- Use kernel_fpu_begin() if it's exported on newer kernels.
- Use ZFS_LINUX_TRY_COMPILE_SYMBOL() to choose the right kernel_fpu
function when using --enable-linux-builtin.
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Tony Hutter <[email protected]>
Closes #8259
Closes #8363
-rw-r--r-- | config/kernel-fpu.m4 | 34 | ||||
-rw-r--r-- | include/linux/simd_x86.h | 11 |
2 files changed, 37 insertions, 8 deletions
diff --git a/config/kernel-fpu.m4 b/config/kernel-fpu.m4 index 671fe7ea5..5fff79a74 100644 --- a/config/kernel-fpu.m4 +++ b/config/kernel-fpu.m4 @@ -12,25 +12,49 @@ dnl # Pre-4.2: Use kernel_fpu_{begin,end}() dnl # HAVE_KERNEL_FPU & KERNEL_EXPORTS_X86_FPU dnl # AC_DEFUN([ZFS_AC_KERNEL_FPU], [ - AC_MSG_CHECKING([which kernel_fpu function to use]) + AC_MSG_CHECKING([which kernel_fpu header to use]) ZFS_LINUX_TRY_COMPILE([ + #include <linux/module.h> + #include <asm/fpu/api.h> + ],[ + ],[ + AC_DEFINE(HAVE_KERNEL_FPU_API_HEADER, 1, [kernel has asm/fpu/api.h]) + AC_MSG_RESULT(asm/fpu/api.h) + ],[ + AC_MSG_RESULT(i387.h & xcr.h) + ]) + + AC_MSG_CHECKING([which kernel_fpu function to use]) + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include <linux/module.h> + #ifdef HAVE_KERNEL_FPU_API_HEADER + #include <asm/fpu/api.h> + #else #include <asm/i387.h> #include <asm/xcr.h> + #endif + MODULE_LICENSE("$ZFS_META_LICENSE"); ],[ kernel_fpu_begin(); kernel_fpu_end(); - ],[ + ], [kernel_fpu_begin], [arch/x86/kernel/fpu/core.c], [ AC_MSG_RESULT(kernel_fpu_*) AC_DEFINE(HAVE_KERNEL_FPU, 1, [kernel has kernel_fpu_* functions]) AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1, [kernel exports FPU functions]) ],[ - ZFS_LINUX_TRY_COMPILE([ - #include <linux/kernel.h> + ZFS_LINUX_TRY_COMPILE_SYMBOL([ + #include <linux/module.h> + #ifdef HAVE_KERNEL_FPU_API_HEADER #include <asm/fpu/api.h> + #else + #include <asm/i387.h> + #include <asm/xcr.h> + #endif + MODULE_LICENSE("$ZFS_META_LICENSE"); ],[ __kernel_fpu_begin(); __kernel_fpu_end(); - ],[ + ], [__kernel_fpu_begin], [arch/x86/kernel/fpu/core.c arch/x86/kernel/i387.c], [ AC_MSG_RESULT(__kernel_fpu_*) AC_DEFINE(HAVE_UNDERSCORE_KERNEL_FPU, 1, [kernel has __kernel_fpu_* functions]) AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1, [kernel exports FPU functions]) diff --git a/include/linux/simd_x86.h b/include/linux/simd_x86.h index 5d6fbed35..12cd74677 100644 --- a/include/linux/simd_x86.h +++ b/include/linux/simd_x86.h @@ -81,9 +81,16 @@ #endif #if defined(_KERNEL) -#if defined(HAVE_UNDERSCORE_KERNEL_FPU) + +#if defined(HAVE_KERNEL_FPU_API_HEADER) #include <asm/fpu/api.h> #include <asm/fpu/internal.h> +#else +#include <asm/i387.h> +#include <asm/xcr.h> +#endif + +#if defined(HAVE_UNDERSCORE_KERNEL_FPU) #define kfpu_begin() \ { \ preempt_disable(); \ @@ -95,8 +102,6 @@ preempt_enable(); \ } #elif defined(HAVE_KERNEL_FPU) -#include <asm/i387.h> -#include <asm/xcr.h> #define kfpu_begin() kernel_fpu_begin() #define kfpu_end() kernel_fpu_end() #else |