ZAP: Reduce leaf array and free chunks fragmentation
[zfs.git] / config / kernel-fpu.m4
blobedfde1a02d30ce8b296ecc20510a4fd8e2eb8a3f
1 dnl #
2 dnl # Handle differences in kernel FPU code.
3 dnl #
4 dnl # Kernel
5 dnl # 5.19:     The asm/fpu/internal.h header was removed, it has been
6 dnl #           effectively empty since the 5.16 kernel.
7 dnl #
8 dnl # 5.11:     kernel_fpu_begin() is an inlined function now, so don't check
9 dnl #           for it inside the kernel symbols.
10 dnl #
11 dnl # 5.0:      Wrappers have been introduced to save/restore the FPU state.
12 dnl #           This change was made to the 4.19.38 and 4.14.120 LTS kernels.
13 dnl #           HAVE_KERNEL_FPU_INTERNAL
14 dnl #
15 dnl # 4.2:      Use __kernel_fpu_{begin,end}()
16 dnl #           HAVE_UNDERSCORE_KERNEL_FPU & KERNEL_EXPORTS_X86_FPU
17 dnl #
18 dnl # Pre-4.2:  Use kernel_fpu_{begin,end}()
19 dnl #           HAVE_KERNEL_FPU & KERNEL_EXPORTS_X86_FPU
20 dnl #
21 dnl # N.B. The header check is performed before all other checks since it
22 dnl # depends on HAVE_KERNEL_FPU_API_HEADER being set in confdefs.h.
23 dnl #
24 AC_DEFUN([ZFS_AC_KERNEL_FPU_HEADER], [
25         AC_MSG_CHECKING([whether fpu headers are available])
26         ZFS_LINUX_TRY_COMPILE([
27                 #include <linux/module.h>
28                 #include <asm/fpu/api.h>
29         ],[
30         ],[
31                 AC_DEFINE(HAVE_KERNEL_FPU_API_HEADER, 1,
32                     [kernel has asm/fpu/api.h])
34                 ZFS_LINUX_TRY_COMPILE([
35                         #include <linux/module.h>
36                         #include <asm/fpu/internal.h>
37                 ],[
38                 ],[
39                         AC_DEFINE(HAVE_KERNEL_FPU_INTERNAL_HEADER, 1,
40                             [kernel has asm/fpu/internal.h])
41                         AC_MSG_RESULT([asm/fpu/api.h asm/fpu/internal.h])
42                 ],[
43                         AC_MSG_RESULT([asm/fpu/api.h])
44                 ])
45         ],[
46                 AC_MSG_RESULT([i387.h])
47         ])
51 AC_DEFUN([ZFS_AC_KERNEL_SRC_FPU], [
52         ZFS_LINUX_TEST_SRC([kernel_fpu], [
53                 #include <linux/types.h>
54                 #ifdef HAVE_KERNEL_FPU_API_HEADER
55                 #include <asm/fpu/api.h>
56                 #ifdef HAVE_KERNEL_FPU_INTERNAL_HEADER
57                 #include <asm/fpu/internal.h>
58                 #endif
59                 #else
60                 #include <asm/i387.h>
61                 #endif
62         ], [
63                 kernel_fpu_begin();
64                 kernel_fpu_end();
65         ], [], [ZFS_META_LICENSE])
67         ZFS_LINUX_TEST_SRC([__kernel_fpu], [
68                 #include <linux/types.h>
69                 #ifdef HAVE_KERNEL_FPU_API_HEADER
70                 #include <asm/fpu/api.h>
71                 #ifdef HAVE_KERNEL_FPU_INTERNAL_HEADER
72                 #include <asm/fpu/internal.h>
73                 #endif
74                 #else
75                 #include <asm/i387.h>
76                 #endif
77         ], [
78                 __kernel_fpu_begin();
79                 __kernel_fpu_end();
80         ], [], [ZFS_META_LICENSE])
82         ZFS_LINUX_TEST_SRC([kernel_neon], [
83                 #include <asm/neon.h>
84         ], [
85                 kernel_neon_begin();
86                 kernel_neon_end();
87         ], [], [ZFS_META_LICENSE])
90 AC_DEFUN([ZFS_AC_KERNEL_FPU], [
91         dnl #
92         dnl # Legacy kernel
93         dnl #
94         AC_MSG_CHECKING([whether kernel fpu is available])
95         ZFS_LINUX_TEST_RESULT([kernel_fpu_license], [
96                 AC_MSG_RESULT(kernel_fpu_*)
97                 AC_DEFINE(HAVE_KERNEL_FPU, 1,
98                     [kernel has kernel_fpu_* functions])
99                 AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1,
100                     [kernel exports FPU functions])
101         ],[
102                 dnl #
103                 dnl # Linux 4.2 kernel
104                 dnl #
105                 ZFS_LINUX_TEST_RESULT_SYMBOL([__kernel_fpu_license],
106                     [__kernel_fpu_begin],
107                     [arch/x86/kernel/fpu/core.c arch/x86/kernel/i387.c], [
108                         AC_MSG_RESULT(__kernel_fpu_*)
109                         AC_DEFINE(HAVE_UNDERSCORE_KERNEL_FPU, 1,
110                             [kernel has __kernel_fpu_* functions])
111                         AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1,
112                             [kernel exports FPU functions])
113                 ],[
114                         dnl #
115                         dnl # ARM neon symbols (only on arm and arm64)
116                         dnl # could be GPL-only on arm64 after Linux 6.2
117                         dnl #
118                         ZFS_LINUX_TEST_RESULT([kernel_neon_license],[
119                                 AC_MSG_RESULT(kernel_neon_*)
120                                 AC_DEFINE(HAVE_KERNEL_NEON, 1,
121                                     [kernel has kernel_neon_* functions])
122                         ],[
123                                 # catch-all
124                                 AC_MSG_RESULT(internal)
125                                 AC_DEFINE(HAVE_KERNEL_FPU_INTERNAL, 1,
126                                     [kernel fpu internal])
127                         ])
128                 ])
129         ])