xref: /freebsd/sys/contrib/openzfs/config/kernel-fpu.m4 (revision e3aa18ad71782a73d3dd9dd3d526bbd2b607ca16)
1eda14cbcSMatt Macydnl #
2eda14cbcSMatt Macydnl # Handle differences in kernel FPU code.
3eda14cbcSMatt Macydnl #
4eda14cbcSMatt Macydnl # Kernel
5*e3aa18adSMartin Matuskadnl # 5.19:	The asm/fpu/internal.h header was removed, it has been
6*e3aa18adSMartin Matuskadnl #		effectively empty since the 5.16 kernel.
7*e3aa18adSMartin Matuskadnl #
8c03c5b1cSMartin Matuskadnl # 5.11:	kernel_fpu_begin() is an inlined function now, so don't check
9c03c5b1cSMartin Matuskadnl #		for it inside the kernel symbols.
10c03c5b1cSMartin Matuskadnl #
11eda14cbcSMatt Macydnl # 5.0:	Wrappers have been introduced to save/restore the FPU state.
12eda14cbcSMatt Macydnl #		This change was made to the 4.19.38 and 4.14.120 LTS kernels.
13eda14cbcSMatt Macydnl #		HAVE_KERNEL_FPU_INTERNAL
14eda14cbcSMatt Macydnl #
15eda14cbcSMatt Macydnl # 4.2:	Use __kernel_fpu_{begin,end}()
16eda14cbcSMatt Macydnl #		HAVE_UNDERSCORE_KERNEL_FPU & KERNEL_EXPORTS_X86_FPU
17eda14cbcSMatt Macydnl #
18eda14cbcSMatt Macydnl # Pre-4.2:	Use kernel_fpu_{begin,end}()
19eda14cbcSMatt Macydnl #		HAVE_KERNEL_FPU & KERNEL_EXPORTS_X86_FPU
20eda14cbcSMatt Macydnl #
21eda14cbcSMatt Macydnl # N.B. The header check is performed before all other checks since it
22eda14cbcSMatt Macydnl # depends on HAVE_KERNEL_FPU_API_HEADER being set in confdefs.h.
23eda14cbcSMatt Macydnl #
24eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_FPU_HEADER], [
25eda14cbcSMatt Macy	AC_MSG_CHECKING([whether fpu headers are available])
26eda14cbcSMatt Macy	ZFS_LINUX_TRY_COMPILE([
27eda14cbcSMatt Macy		#include <linux/module.h>
28eda14cbcSMatt Macy		#include <asm/fpu/api.h>
29eda14cbcSMatt Macy	],[
30eda14cbcSMatt Macy	],[
31eda14cbcSMatt Macy		AC_DEFINE(HAVE_KERNEL_FPU_API_HEADER, 1,
32eda14cbcSMatt Macy		    [kernel has asm/fpu/api.h])
33*e3aa18adSMartin Matuska
34*e3aa18adSMartin Matuska		ZFS_LINUX_TRY_COMPILE([
35*e3aa18adSMartin Matuska			#include <linux/module.h>
36*e3aa18adSMartin Matuska			#include <asm/fpu/internal.h>
37681ce946SMartin Matuska		],[
38*e3aa18adSMartin Matuska		],[
39*e3aa18adSMartin Matuska			AC_DEFINE(HAVE_KERNEL_FPU_INTERNAL_HEADER, 1,
40*e3aa18adSMartin Matuska			    [kernel has asm/fpu/internal.h])
41*e3aa18adSMartin Matuska			AC_MSG_RESULT([asm/fpu/api.h asm/fpu/internal.h])
42*e3aa18adSMartin Matuska		],[
43*e3aa18adSMartin Matuska			AC_MSG_RESULT([asm/fpu/api.h])
44eda14cbcSMatt Macy		])
45*e3aa18adSMartin Matuska	],[
46*e3aa18adSMartin Matuska		AC_MSG_RESULT([i387.h])
47*e3aa18adSMartin Matuska	])
48*e3aa18adSMartin Matuska
49eda14cbcSMatt Macy])
50eda14cbcSMatt Macy
51eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_FPU], [
52eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([kernel_fpu], [
53eda14cbcSMatt Macy		#include <linux/types.h>
54eda14cbcSMatt Macy		#ifdef HAVE_KERNEL_FPU_API_HEADER
55eda14cbcSMatt Macy		#include <asm/fpu/api.h>
56*e3aa18adSMartin Matuska		#ifdef HAVE_KERNEL_FPU_INTERNAL_HEADER
57da5137abSMartin Matuska		#include <asm/fpu/internal.h>
58*e3aa18adSMartin Matuska		#endif
59eda14cbcSMatt Macy		#else
60eda14cbcSMatt Macy		#include <asm/i387.h>
61eda14cbcSMatt Macy		#endif
62eda14cbcSMatt Macy	], [
63eda14cbcSMatt Macy		kernel_fpu_begin();
64eda14cbcSMatt Macy		kernel_fpu_end();
657877fdebSMatt Macy	], [], [ZFS_META_LICENSE])
66eda14cbcSMatt Macy
67eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([__kernel_fpu], [
68eda14cbcSMatt Macy		#include <linux/types.h>
69eda14cbcSMatt Macy		#ifdef HAVE_KERNEL_FPU_API_HEADER
70eda14cbcSMatt Macy		#include <asm/fpu/api.h>
71*e3aa18adSMartin Matuska		#ifdef HAVE_KERNEL_FPU_INTERNAL_HEADER
72da5137abSMartin Matuska		#include <asm/fpu/internal.h>
73*e3aa18adSMartin Matuska		#endif
74eda14cbcSMatt Macy		#else
75eda14cbcSMatt Macy		#include <asm/i387.h>
76eda14cbcSMatt Macy		#endif
77eda14cbcSMatt Macy	], [
78eda14cbcSMatt Macy		__kernel_fpu_begin();
79eda14cbcSMatt Macy		__kernel_fpu_end();
807877fdebSMatt Macy	], [], [ZFS_META_LICENSE])
81eda14cbcSMatt Macy
82eda14cbcSMatt Macy])
83eda14cbcSMatt Macy
84eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_FPU], [
85eda14cbcSMatt Macy	dnl #
86eda14cbcSMatt Macy	dnl # Legacy kernel
87eda14cbcSMatt Macy	dnl #
88eda14cbcSMatt Macy	AC_MSG_CHECKING([whether kernel fpu is available])
89c03c5b1cSMartin Matuska	ZFS_LINUX_TEST_RESULT([kernel_fpu_license], [
90eda14cbcSMatt Macy		AC_MSG_RESULT(kernel_fpu_*)
91eda14cbcSMatt Macy		AC_DEFINE(HAVE_KERNEL_FPU, 1,
92eda14cbcSMatt Macy		    [kernel has kernel_fpu_* functions])
93eda14cbcSMatt Macy		AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1,
94eda14cbcSMatt Macy		    [kernel exports FPU functions])
95eda14cbcSMatt Macy	],[
96eda14cbcSMatt Macy		dnl #
97eda14cbcSMatt Macy		dnl # Linux 4.2 kernel
98eda14cbcSMatt Macy		dnl #
99eda14cbcSMatt Macy		ZFS_LINUX_TEST_RESULT_SYMBOL([__kernel_fpu_license],
100eda14cbcSMatt Macy		    [__kernel_fpu_begin],
101eda14cbcSMatt Macy		    [arch/x86/kernel/fpu/core.c arch/x86/kernel/i387.c], [
102eda14cbcSMatt Macy			AC_MSG_RESULT(__kernel_fpu_*)
103eda14cbcSMatt Macy			AC_DEFINE(HAVE_UNDERSCORE_KERNEL_FPU, 1,
104eda14cbcSMatt Macy			    [kernel has __kernel_fpu_* functions])
105eda14cbcSMatt Macy			AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1,
106eda14cbcSMatt Macy			    [kernel exports FPU functions])
107eda14cbcSMatt Macy		],[
108eda14cbcSMatt Macy			AC_MSG_RESULT(internal)
109eda14cbcSMatt Macy			AC_DEFINE(HAVE_KERNEL_FPU_INTERNAL, 1,
110eda14cbcSMatt Macy			    [kernel fpu internal])
111eda14cbcSMatt Macy		])
112eda14cbcSMatt Macy	])
113c03c5b1cSMartin Matuska])
114