diff options
Diffstat (limited to 'config/kernel-fpu.m4')
-rw-r--r-- | config/kernel-fpu.m4 | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/config/kernel-fpu.m4 b/config/kernel-fpu.m4 index 5fff79a74..31bf35f83 100644 --- a/config/kernel-fpu.m4 +++ b/config/kernel-fpu.m4 @@ -2,8 +2,15 @@ dnl # dnl # Handle differences in kernel FPU code. dnl # dnl # Kernel -dnl # 5.0: All kernel fpu functions are GPL only, so we can't use them. -dnl # (nothing defined) +dnl # 5.2: The fpu->initialized flag was replaced by TIF_NEED_FPU_LOAD. +dnl # HAVE_KERNEL_TIF_NEED_FPU_LOAD +dnl # +dnl # 5.0: As an optimization SIMD operations performed by kernel +dnl # threads can skip saving and restoring their FPU context. +dnl # Wrappers have been introduced to determine the running +dnl # context and use either the SIMD or generic implementation. +dnl # This change was made to the 4.19.38 and 4.14.120 LTS kernels. +dnl # HAVE_KERNEL_FPU_INITIALIZED dnl # dnl # 4.2: Use __kernel_fpu_{begin,end}() dnl # HAVE_UNDERSCORE_KERNEL_FPU & KERNEL_EXPORTS_X86_FPU @@ -56,10 +63,39 @@ AC_DEFUN([ZFS_AC_KERNEL_FPU], [ __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]) + AC_DEFINE(HAVE_UNDERSCORE_KERNEL_FPU, 1, + [kernel has __kernel_fpu_* functions]) + AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1, + [kernel exports FPU functions]) ],[ - AC_MSG_RESULT(not exported) + ZFS_LINUX_TRY_COMPILE([ + #include <linux/module.h> + #include <linux/sched.h> + ],[ + struct fpu *fpu = ¤t->thread.fpu; + if (fpu->initialized) { return (0); }; + ],[ + AC_MSG_RESULT(fpu.initialized) + AC_DEFINE(HAVE_KERNEL_FPU_INITIALIZED, 1, + [kernel fpu.initialized exists]) + ],[ + ZFS_LINUX_TRY_COMPILE([ + #include <linux/module.h> + #include <asm/thread_info.h> + + #if !defined(TIF_NEED_FPU_LOAD) + #error "TIF_NEED_FPU_LOAD undefined" + #endif + ],[ + ],[ + AC_MSG_RESULT(TIF_NEED_FPU_LOAD) + AC_DEFINE( + HAVE_KERNEL_TIF_NEED_FPU_LOAD, 1, + [kernel TIF_NEED_FPU_LOAD exists]) + ],[ + AC_MSG_RESULT(unavailable) + ]) + ]) ]) ]) ]) |