From 806c3777e713b2fb7e7acdb2d8e3400a7408368b Mon Sep 17 00:00:00 2001 From: Coleman Kane Date: Mon, 15 Nov 2021 23:23:30 -0500 Subject: [PATCH] Linux 5.16 compat: asm/fpu/xcr.h is new location for xgetbv/xsetbv Linux 5.16 moved these functions into this new header in commit 1b4fb8545f2b00f2844c4b7619d64d98440a477c. This change adds code to look for the presence of this header, and include it so that the code using xgetbv & xsetbv will compile again. Reviewed-by: Brian Behlendorf Signed-off-by: Coleman Kane Closes #12800 --- config/kernel-fpu.m4 | 15 +++++++++++++++ include/os/linux/kernel/linux/simd_x86.h | 3 +++ 2 files changed, 18 insertions(+) diff --git a/config/kernel-fpu.m4 b/config/kernel-fpu.m4 index 4d6fe05228..faa64f1ec4 100644 --- a/config/kernel-fpu.m4 +++ b/config/kernel-fpu.m4 @@ -2,6 +2,9 @@ dnl # dnl # Handle differences in kernel FPU code. dnl # dnl # Kernel +dnl # 5.16: XCR code put into asm/fpu/xcr.h +dnl # HAVE_KERNEL_FPU_XCR_HEADER +dnl # dnl # 5.0: Wrappers have been introduced to save/restore the FPU state. dnl # This change was made to the 4.19.38 and 4.14.120 LTS kernels. dnl # HAVE_KERNEL_FPU_INTERNAL @@ -25,6 +28,18 @@ AC_DEFUN([ZFS_AC_KERNEL_FPU_HEADER], [ AC_DEFINE(HAVE_KERNEL_FPU_API_HEADER, 1, [kernel has asm/fpu/api.h]) AC_MSG_RESULT(asm/fpu/api.h) + AC_MSG_CHECKING([whether fpu/xcr header is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + #include + ],[ + ],[ + AC_DEFINE(HAVE_KERNEL_FPU_XCR_HEADER, 1, + [kernel has asm/fpu/xcr.h]) + AC_MSG_RESULT(asm/fpu/xcr.h) + ],[ + AC_MSG_RESULT(no asm/fpu/xcr.h) + ]) ],[ AC_MSG_RESULT(i387.h & xcr.h) ]) diff --git a/include/os/linux/kernel/linux/simd_x86.h b/include/os/linux/kernel/linux/simd_x86.h index cdd3286d21..f2ae0fcbc2 100644 --- a/include/os/linux/kernel/linux/simd_x86.h +++ b/include/os/linux/kernel/linux/simd_x86.h @@ -88,6 +88,9 @@ #if defined(HAVE_KERNEL_FPU_API_HEADER) #include #include +#if defined(HAVE_KERNEL_FPU_XCR_HEADER) +#include +#endif #else #include #include