1eda14cbcSMatt Macydnl # 2eda14cbcSMatt Macydnl # Default ZFS kernel configuration 3eda14cbcSMatt Macydnl # 4eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ 5eda14cbcSMatt Macy AM_COND_IF([BUILD_LINUX], [ 6eda14cbcSMatt Macy dnl # Setup the kernel build environment. 7eda14cbcSMatt Macy ZFS_AC_KERNEL 8eda14cbcSMatt Macy ZFS_AC_QAT 9eda14cbcSMatt Macy 10eda14cbcSMatt Macy dnl # Sanity checks for module building and CONFIG_* defines 11eda14cbcSMatt Macy ZFS_AC_KERNEL_CONFIG_DEFINED 12716fd348SMartin Matuska ZFS_AC_MODULE_SYMVERS 13eda14cbcSMatt Macy 14eda14cbcSMatt Macy dnl # Sequential ZFS_LINUX_TRY_COMPILE tests 15eda14cbcSMatt Macy ZFS_AC_KERNEL_FPU_HEADER 167877fdebSMatt Macy ZFS_AC_KERNEL_OBJTOOL_HEADER 17eda14cbcSMatt Macy ZFS_AC_KERNEL_MISC_MINOR 18eda14cbcSMatt Macy ZFS_AC_KERNEL_DECLARE_EVENT_CLASS 19eda14cbcSMatt Macy 20eda14cbcSMatt Macy dnl # Parallel ZFS_LINUX_TEST_SRC / ZFS_LINUX_TEST_RESULT tests 21eda14cbcSMatt Macy ZFS_AC_KERNEL_TEST_SRC 22eda14cbcSMatt Macy ZFS_AC_KERNEL_TEST_RESULT 23eda14cbcSMatt Macy 24eda14cbcSMatt Macy AS_IF([test "$LINUX_OBJ" != "$LINUX"], [ 25eda14cbcSMatt Macy KERNEL_MAKE="$KERNEL_MAKE O=$LINUX_OBJ" 26eda14cbcSMatt Macy ]) 27eda14cbcSMatt Macy 28eda14cbcSMatt Macy AC_SUBST(KERNEL_MAKE) 29eda14cbcSMatt Macy ]) 30eda14cbcSMatt Macy]) 31eda14cbcSMatt Macy 32eda14cbcSMatt Macydnl # 33eda14cbcSMatt Macydnl # Generate and compile all of the kernel API test cases to determine 34eda14cbcSMatt Macydnl # which interfaces are available. By invoking the kernel build system 35eda14cbcSMatt Macydnl # only once the compilation can be done in parallel significantly 36eda14cbcSMatt Macydnl # speeding up the process. 37eda14cbcSMatt Macydnl # 38eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [ 39aca928a5SMartin Matuska ZFS_AC_KERNEL_SRC_TYPES 40eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_OBJTOOL 41eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_ACCESS_OK_TYPE 42eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_PDE_DATA 43c7046f76SMartin Matuska ZFS_AC_KERNEL_SRC_GENERIC_FADVISE 44eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_SCHED 45eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_USLEEP_RANGE 46eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_VMALLOC_PAGE_KERNEL 47eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_INODE_TIMES 48eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_PROC_OPERATIONS 49eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS 50eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BIO 51eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV 52eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLK_QUEUE 53716fd348SMartin Matuska ZFS_AC_KERNEL_SRC_GENHD_FLAGS 547877fdebSMatt Macy ZFS_AC_KERNEL_SRC_REVALIDATE_DISK 55eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_GET_DISK_RO 56eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_DISCARD_GRANULARITY 57eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_INODE_OWNER_OR_CAPABLE 58eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_XATTR 59eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_ACL 60d411c1d6SMartin Matuska ZFS_AC_KERNEL_SRC_INODE_SETATTR 61eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_INODE_GETATTR 62eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_SHOW_OPTIONS 63eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_SHRINKER 64f9693befSMartin Matuska ZFS_AC_KERNEL_SRC_MKDIR 65eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_LOOKUP_FLAGS 66f9693befSMartin Matuska ZFS_AC_KERNEL_SRC_CREATE 67716fd348SMartin Matuska ZFS_AC_KERNEL_SRC_PERMISSION 68eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_TMPFILE 69eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_AUTOMOUNT 70eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_COMMIT_METADATA 71eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_SETATTR_PREPARE 72eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_INSERT_INODE_LOCKED 73eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_TRUNCATE_SETSIZE 74eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_SECURITY_INODE 75eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_FST_MOUNT 76eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_SET_NLINK 77eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_SGET 78716fd348SMartin Matuska ZFS_AC_KERNEL_SRC_VFS_FILEMAP_DIRTY_FOLIO 79e3aa18adSMartin Matuska ZFS_AC_KERNEL_SRC_VFS_READ_FOLIO 805c65a0a9SMartin Matuska ZFS_AC_KERNEL_SRC_VFS_MIGRATE_FOLIO 81eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_VFS_FSYNC_2ARGS 82e3aa18adSMartin Matuska ZFS_AC_KERNEL_SRC_VFS_READPAGES 83e3aa18adSMartin Matuska ZFS_AC_KERNEL_SRC_VFS_SET_PAGE_DIRTY_NOBUFFERS 847877fdebSMatt Macy ZFS_AC_KERNEL_SRC_VFS_IOV_ITER 85315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_VFS_GENERIC_COPY_FILE_RANGE 86783d3ff6SMartin Matuska ZFS_AC_KERNEL_SRC_VFS_SPLICE_COPY_FILE_RANGE 87315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_VFS_REMAP_FILE_RANGE 88315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_VFS_CLONE_FILE_RANGE 89315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_VFS_DEDUPE_FILE_RANGE 90eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_KMAP_ATOMIC_ARGS 9175e1fea6SMartin Matuska ZFS_AC_KERNEL_SRC_KMAP_LOCAL_PAGE 92eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_FOLLOW_DOWN_ONE 93eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_MAKE_REQUEST_FN 94eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_GENERIC_IO_ACCT 95eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_FPU 96eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_FMODE_T 97eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_KUIDGID_T 98eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_KUID_HELPERS 99f9693befSMartin Matuska ZFS_AC_KERNEL_SRC_RENAME 100eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_TOTALRAM_PAGES_FUNC 101eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_TOTALHIGH_PAGES 102eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_PERCPU 103d411c1d6SMartin Matuska ZFS_AC_KERNEL_SRC_GENERIC_FILLATTR 104f9693befSMartin Matuska ZFS_AC_KERNEL_SRC_MKNOD 105f9693befSMartin Matuska ZFS_AC_KERNEL_SRC_SYMLINK 106f9693befSMartin Matuska ZFS_AC_KERNEL_SRC_BIO_MAX_SEGS 10716038816SMartin Matuska ZFS_AC_KERNEL_SRC_SIGINFO 108716fd348SMartin Matuska ZFS_AC_KERNEL_SRC_SYSFS 10953b70c86SMartin Matuska ZFS_AC_KERNEL_SRC_STANDALONE_LINUX_STDARG 110fd45b686SMartin Matuska ZFS_AC_KERNEL_SRC_STRLCPY 111681ce946SMartin Matuska ZFS_AC_KERNEL_SRC_PAGEMAP_FOLIO_WAIT_BIT 112c03c5b1cSMartin Matuska ZFS_AC_KERNEL_SRC_ADD_DISK 113c03c5b1cSMartin Matuska ZFS_AC_KERNEL_SRC_KTHREAD 114da5137abSMartin Matuska ZFS_AC_KERNEL_SRC_ZERO_PAGE 115716fd348SMartin Matuska ZFS_AC_KERNEL_SRC___COPY_FROM_USER_INATOMIC 116dbd5678dSMartin Matuska ZFS_AC_KERNEL_SRC_IDMAP_MNT_API 117fd45b686SMartin Matuska ZFS_AC_KERNEL_SRC_IDMAP_NO_USERNS 118dbd5678dSMartin Matuska ZFS_AC_KERNEL_SRC_IATTR_VFSID 119d411c1d6SMartin Matuska ZFS_AC_KERNEL_SRC_WRITEPAGE_T 1204e8d558cSMartin Matuska ZFS_AC_KERNEL_SRC_RECLAIMED 121315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_REGISTER_SYSCTL_TABLE 12229dc9349SMartin Matuska ZFS_AC_KERNEL_SRC_REGISTER_SYSCTL_SZ 12329dc9349SMartin Matuska ZFS_AC_KERNEL_SRC_PROC_HANDLER_CTL_TABLE_CONST 124315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_COPY_SPLICE_READ 125abcdc1b9SMartin Matuska ZFS_AC_KERNEL_SRC_SYNC_BDEV 1267a7741afSMartin Matuska ZFS_AC_KERNEL_SRC_MM_PAGE_FLAGS 127783d3ff6SMartin Matuska ZFS_AC_KERNEL_SRC_MM_PAGE_SIZE 12829dc9349SMartin Matuska ZFS_AC_KERNEL_SRC_MM_PAGE_MAPPING 1297a7741afSMartin Matuska ZFS_AC_KERNEL_SRC_FILE 130*dd215568SMartin Matuska ZFS_AC_KERNEL_SRC_PIN_USER_PAGES 1312a58b312SMartin Matuska case "$host_cpu" in 1322a58b312SMartin Matuska powerpc*) 1332a58b312SMartin Matuska ZFS_AC_KERNEL_SRC_CPU_HAS_FEATURE 1342a58b312SMartin Matuska ZFS_AC_KERNEL_SRC_FLUSH_DCACHE_PAGE 1352a58b312SMartin Matuska ;; 1363494f7c0SMartin Matuska riscv*) 1373494f7c0SMartin Matuska ZFS_AC_KERNEL_SRC_FLUSH_DCACHE_PAGE 1383494f7c0SMartin Matuska ;; 1392a58b312SMartin Matuska esac 140eda14cbcSMatt Macy 141eda14cbcSMatt Macy AC_MSG_CHECKING([for available kernel interfaces]) 142eda14cbcSMatt Macy ZFS_LINUX_TEST_COMPILE_ALL([kabi]) 143eda14cbcSMatt Macy AC_MSG_RESULT([done]) 144eda14cbcSMatt Macy]) 145eda14cbcSMatt Macy 146eda14cbcSMatt Macydnl # 147eda14cbcSMatt Macydnl # Check results of kernel interface tests. 148eda14cbcSMatt Macydnl # 149eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [ 150aca928a5SMartin Matuska ZFS_AC_KERNEL_TYPES 151eda14cbcSMatt Macy ZFS_AC_KERNEL_ACCESS_OK_TYPE 152eda14cbcSMatt Macy ZFS_AC_KERNEL_OBJTOOL 153eda14cbcSMatt Macy ZFS_AC_KERNEL_PDE_DATA 154c7046f76SMartin Matuska ZFS_AC_KERNEL_GENERIC_FADVISE 155eda14cbcSMatt Macy ZFS_AC_KERNEL_SCHED 156eda14cbcSMatt Macy ZFS_AC_KERNEL_USLEEP_RANGE 157eda14cbcSMatt Macy ZFS_AC_KERNEL_VMALLOC_PAGE_KERNEL 158eda14cbcSMatt Macy ZFS_AC_KERNEL_INODE_TIMES 159eda14cbcSMatt Macy ZFS_AC_KERNEL_PROC_OPERATIONS 160eda14cbcSMatt Macy ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS 161eda14cbcSMatt Macy ZFS_AC_KERNEL_BIO 162eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV 163eda14cbcSMatt Macy ZFS_AC_KERNEL_BLK_QUEUE 164716fd348SMartin Matuska ZFS_AC_KERNEL_GENHD_FLAGS 1657877fdebSMatt Macy ZFS_AC_KERNEL_REVALIDATE_DISK 166eda14cbcSMatt Macy ZFS_AC_KERNEL_GET_DISK_RO 167eda14cbcSMatt Macy ZFS_AC_KERNEL_DISCARD_GRANULARITY 168eda14cbcSMatt Macy ZFS_AC_KERNEL_INODE_OWNER_OR_CAPABLE 169eda14cbcSMatt Macy ZFS_AC_KERNEL_XATTR 170eda14cbcSMatt Macy ZFS_AC_KERNEL_ACL 171d411c1d6SMartin Matuska ZFS_AC_KERNEL_INODE_SETATTR 172eda14cbcSMatt Macy ZFS_AC_KERNEL_INODE_GETATTR 173eda14cbcSMatt Macy ZFS_AC_KERNEL_SHOW_OPTIONS 174eda14cbcSMatt Macy ZFS_AC_KERNEL_SHRINKER 175f9693befSMartin Matuska ZFS_AC_KERNEL_MKDIR 176eda14cbcSMatt Macy ZFS_AC_KERNEL_LOOKUP_FLAGS 177f9693befSMartin Matuska ZFS_AC_KERNEL_CREATE 178716fd348SMartin Matuska ZFS_AC_KERNEL_PERMISSION 179eda14cbcSMatt Macy ZFS_AC_KERNEL_TMPFILE 180eda14cbcSMatt Macy ZFS_AC_KERNEL_AUTOMOUNT 181eda14cbcSMatt Macy ZFS_AC_KERNEL_COMMIT_METADATA 182eda14cbcSMatt Macy ZFS_AC_KERNEL_SETATTR_PREPARE 183eda14cbcSMatt Macy ZFS_AC_KERNEL_INSERT_INODE_LOCKED 184eda14cbcSMatt Macy ZFS_AC_KERNEL_TRUNCATE_SETSIZE 185eda14cbcSMatt Macy ZFS_AC_KERNEL_SECURITY_INODE 186eda14cbcSMatt Macy ZFS_AC_KERNEL_FST_MOUNT 187eda14cbcSMatt Macy ZFS_AC_KERNEL_SET_NLINK 188eda14cbcSMatt Macy ZFS_AC_KERNEL_SGET 189716fd348SMartin Matuska ZFS_AC_KERNEL_VFS_FILEMAP_DIRTY_FOLIO 190e3aa18adSMartin Matuska ZFS_AC_KERNEL_VFS_READ_FOLIO 1915c65a0a9SMartin Matuska ZFS_AC_KERNEL_VFS_MIGRATE_FOLIO 192eda14cbcSMatt Macy ZFS_AC_KERNEL_VFS_FSYNC_2ARGS 193e3aa18adSMartin Matuska ZFS_AC_KERNEL_VFS_READPAGES 194e3aa18adSMartin Matuska ZFS_AC_KERNEL_VFS_SET_PAGE_DIRTY_NOBUFFERS 1957877fdebSMatt Macy ZFS_AC_KERNEL_VFS_IOV_ITER 196315ee00fSMartin Matuska ZFS_AC_KERNEL_VFS_GENERIC_COPY_FILE_RANGE 197783d3ff6SMartin Matuska ZFS_AC_KERNEL_VFS_SPLICE_COPY_FILE_RANGE 198315ee00fSMartin Matuska ZFS_AC_KERNEL_VFS_REMAP_FILE_RANGE 199315ee00fSMartin Matuska ZFS_AC_KERNEL_VFS_CLONE_FILE_RANGE 200315ee00fSMartin Matuska ZFS_AC_KERNEL_VFS_DEDUPE_FILE_RANGE 201eda14cbcSMatt Macy ZFS_AC_KERNEL_KMAP_ATOMIC_ARGS 20275e1fea6SMartin Matuska ZFS_AC_KERNEL_KMAP_LOCAL_PAGE 203eda14cbcSMatt Macy ZFS_AC_KERNEL_FOLLOW_DOWN_ONE 204eda14cbcSMatt Macy ZFS_AC_KERNEL_MAKE_REQUEST_FN 205eda14cbcSMatt Macy ZFS_AC_KERNEL_GENERIC_IO_ACCT 206eda14cbcSMatt Macy ZFS_AC_KERNEL_FPU 207eda14cbcSMatt Macy ZFS_AC_KERNEL_FMODE_T 208eda14cbcSMatt Macy ZFS_AC_KERNEL_KUIDGID_T 209eda14cbcSMatt Macy ZFS_AC_KERNEL_KUID_HELPERS 210f9693befSMartin Matuska ZFS_AC_KERNEL_RENAME 211eda14cbcSMatt Macy ZFS_AC_KERNEL_TOTALRAM_PAGES_FUNC 212eda14cbcSMatt Macy ZFS_AC_KERNEL_TOTALHIGH_PAGES 213eda14cbcSMatt Macy ZFS_AC_KERNEL_PERCPU 214d411c1d6SMartin Matuska ZFS_AC_KERNEL_GENERIC_FILLATTR 215f9693befSMartin Matuska ZFS_AC_KERNEL_MKNOD 216f9693befSMartin Matuska ZFS_AC_KERNEL_SYMLINK 217f9693befSMartin Matuska ZFS_AC_KERNEL_BIO_MAX_SEGS 21816038816SMartin Matuska ZFS_AC_KERNEL_SIGINFO 219716fd348SMartin Matuska ZFS_AC_KERNEL_SYSFS 22053b70c86SMartin Matuska ZFS_AC_KERNEL_STANDALONE_LINUX_STDARG 221fd45b686SMartin Matuska ZFS_AC_KERNEL_STRLCPY 222681ce946SMartin Matuska ZFS_AC_KERNEL_PAGEMAP_FOLIO_WAIT_BIT 223c03c5b1cSMartin Matuska ZFS_AC_KERNEL_ADD_DISK 224c03c5b1cSMartin Matuska ZFS_AC_KERNEL_KTHREAD 225da5137abSMartin Matuska ZFS_AC_KERNEL_ZERO_PAGE 226716fd348SMartin Matuska ZFS_AC_KERNEL___COPY_FROM_USER_INATOMIC 227dbd5678dSMartin Matuska ZFS_AC_KERNEL_IDMAP_MNT_API 228fd45b686SMartin Matuska ZFS_AC_KERNEL_IDMAP_NO_USERNS 229dbd5678dSMartin Matuska ZFS_AC_KERNEL_IATTR_VFSID 230d411c1d6SMartin Matuska ZFS_AC_KERNEL_WRITEPAGE_T 2314e8d558cSMartin Matuska ZFS_AC_KERNEL_RECLAIMED 232315ee00fSMartin Matuska ZFS_AC_KERNEL_REGISTER_SYSCTL_TABLE 23329dc9349SMartin Matuska ZFS_AC_KERNEL_REGISTER_SYSCTL_SZ 23429dc9349SMartin Matuska ZFS_AC_KERNEL_PROC_HANDLER_CTL_TABLE_CONST 235315ee00fSMartin Matuska ZFS_AC_KERNEL_COPY_SPLICE_READ 236abcdc1b9SMartin Matuska ZFS_AC_KERNEL_SYNC_BDEV 2377a7741afSMartin Matuska ZFS_AC_KERNEL_MM_PAGE_FLAGS 238783d3ff6SMartin Matuska ZFS_AC_KERNEL_MM_PAGE_SIZE 23929dc9349SMartin Matuska ZFS_AC_KERNEL_MM_PAGE_MAPPING 2407a7741afSMartin Matuska ZFS_AC_KERNEL_1ARG_ASSIGN_STR 2417a7741afSMartin Matuska ZFS_AC_KERNEL_FILE 242*dd215568SMartin Matuska ZFS_AC_KERNEL_PIN_USER_PAGES 2432a58b312SMartin Matuska case "$host_cpu" in 2442a58b312SMartin Matuska powerpc*) 2452a58b312SMartin Matuska ZFS_AC_KERNEL_CPU_HAS_FEATURE 2462a58b312SMartin Matuska ZFS_AC_KERNEL_FLUSH_DCACHE_PAGE 2472a58b312SMartin Matuska ;; 2483494f7c0SMartin Matuska riscv*) 2493494f7c0SMartin Matuska ZFS_AC_KERNEL_FLUSH_DCACHE_PAGE 2503494f7c0SMartin Matuska ;; 2512a58b312SMartin Matuska esac 252eda14cbcSMatt Macy]) 253eda14cbcSMatt Macy 254eda14cbcSMatt Macydnl # 255eda14cbcSMatt Macydnl # Detect name used for Module.symvers file in kernel 256eda14cbcSMatt Macydnl # 257eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_MODULE_SYMVERS], [ 258eda14cbcSMatt Macy modpost=$LINUX/scripts/Makefile.modpost 259eda14cbcSMatt Macy AC_MSG_CHECKING([kernel file name for module symbols]) 260eda14cbcSMatt Macy AS_IF([test "x$enable_linux_builtin" != xyes -a -f "$modpost"], [ 261eda14cbcSMatt Macy AS_IF([grep -q Modules.symvers $modpost], [ 262eda14cbcSMatt Macy LINUX_SYMBOLS=Modules.symvers 263eda14cbcSMatt Macy ], [ 264eda14cbcSMatt Macy LINUX_SYMBOLS=Module.symvers 265eda14cbcSMatt Macy ]) 266eda14cbcSMatt Macy 267eda14cbcSMatt Macy AS_IF([test ! -f "$LINUX_OBJ/$LINUX_SYMBOLS"], [ 268eda14cbcSMatt Macy AC_MSG_ERROR([ 269eda14cbcSMatt Macy *** Please make sure the kernel devel package for your distribution 270eda14cbcSMatt Macy *** is installed. If you are building with a custom kernel, make sure 271eda14cbcSMatt Macy *** the kernel is configured, built, and the '--with-linux=PATH' 272eda14cbcSMatt Macy *** configure option refers to the location of the kernel source. 273eda14cbcSMatt Macy ]) 274eda14cbcSMatt Macy ]) 275eda14cbcSMatt Macy ], [ 276eda14cbcSMatt Macy LINUX_SYMBOLS=NONE 277eda14cbcSMatt Macy ]) 278eda14cbcSMatt Macy AC_MSG_RESULT($LINUX_SYMBOLS) 279eda14cbcSMatt Macy AC_SUBST(LINUX_SYMBOLS) 280eda14cbcSMatt Macy]) 281eda14cbcSMatt Macy 282eda14cbcSMatt Macydnl # 283eda14cbcSMatt Macydnl # Detect the kernel to be built against 284eda14cbcSMatt Macydnl # 285c03c5b1cSMartin Matuskadnl # Most modern Linux distributions have separate locations for bare 286c03c5b1cSMartin Matuskadnl # source (source) and prebuilt (build) files. Additionally, there are 287c03c5b1cSMartin Matuskadnl # `source` and `build` symlinks in `/lib/modules/$(KERNEL_VERSION)` 288c03c5b1cSMartin Matuskadnl # pointing to them. The directory search order is now: 289c03c5b1cSMartin Matuskadnl # 290c03c5b1cSMartin Matuskadnl # - `configure` command line values if both `--with-linux` and 291c03c5b1cSMartin Matuskadnl # `--with-linux-obj` were defined 292c03c5b1cSMartin Matuskadnl # 293c03c5b1cSMartin Matuskadnl # - If only `--with-linux` was defined, `--with-linux-obj` is assumed 294c03c5b1cSMartin Matuskadnl # to have the same value as `--with-linux` 295c03c5b1cSMartin Matuskadnl # 296c03c5b1cSMartin Matuskadnl # - If neither `--with-linux` nor `--with-linux-obj` were defined 297c03c5b1cSMartin Matuskadnl # autodetection is used: 298c03c5b1cSMartin Matuskadnl # 299c03c5b1cSMartin Matuskadnl # - `/lib/modules/$(uname -r)/{source,build}` respectively, if exist. 300c03c5b1cSMartin Matuskadnl # 301c03c5b1cSMartin Matuskadnl # - If only `/lib/modules/$(uname -r)/build` exists, it is assumed 302c03c5b1cSMartin Matuskadnl # to be both source and build directory. 303c03c5b1cSMartin Matuskadnl # 304c03c5b1cSMartin Matuskadnl # - The first directory in `/lib/modules` with the highest version 305c03c5b1cSMartin Matuskadnl # number according to `sort -V` which contains both `source` and 306c03c5b1cSMartin Matuskadnl # `build` symlinks/directories. If module directory contains only 307c03c5b1cSMartin Matuskadnl # `build` component, it is assumed to be both source and build 308c03c5b1cSMartin Matuskadnl # directory. 309c03c5b1cSMartin Matuskadnl # 310c03c5b1cSMartin Matuskadnl # - Last resort: the first directory matching `/usr/src/kernels/*` 311c03c5b1cSMartin Matuskadnl # and `/usr/src/linux-*` with the highest version number according 312c03c5b1cSMartin Matuskadnl # to `sort -V` is assumed to be both source and build directory. 313c03c5b1cSMartin Matuskadnl # 314eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL], [ 315eda14cbcSMatt Macy AC_ARG_WITH([linux], 316eda14cbcSMatt Macy AS_HELP_STRING([--with-linux=PATH], 317eda14cbcSMatt Macy [Path to kernel source]), 318eda14cbcSMatt Macy [kernelsrc="$withval"]) 319eda14cbcSMatt Macy 320eda14cbcSMatt Macy AC_ARG_WITH(linux-obj, 321eda14cbcSMatt Macy AS_HELP_STRING([--with-linux-obj=PATH], 322eda14cbcSMatt Macy [Path to kernel build objects]), 323eda14cbcSMatt Macy [kernelbuild="$withval"]) 324eda14cbcSMatt Macy 325c03c5b1cSMartin Matuska AC_MSG_CHECKING([kernel source and build directories]) 326c03c5b1cSMartin Matuska AS_IF([test -n "$kernelsrc" && test -z "$kernelbuild"], [ 327c03c5b1cSMartin Matuska kernelbuild="$kernelsrc" 328c03c5b1cSMartin Matuska ], [test -z "$kernelsrc"], [ 329c03c5b1cSMartin Matuska AS_IF([test -e "/lib/modules/$(uname -r)/source" && \ 330c03c5b1cSMartin Matuska test -e "/lib/modules/$(uname -r)/build"], [ 331c03c5b1cSMartin Matuska src="/lib/modules/$(uname -r)/source" 332c03c5b1cSMartin Matuska build="/lib/modules/$(uname -r)/build" 333eda14cbcSMatt Macy ], [test -e "/lib/modules/$(uname -r)/build"], [ 334c03c5b1cSMartin Matuska build="/lib/modules/$(uname -r)/build" 335c03c5b1cSMartin Matuska src="$build" 336eda14cbcSMatt Macy ], [ 337c03c5b1cSMartin Matuska src= 338c03c5b1cSMartin Matuska 339c03c5b1cSMartin Matuska for d in $(ls -1d /lib/modules/* 2>/dev/null | sort -Vr); do 340c03c5b1cSMartin Matuska if test -e "$d/source" && test -e "$d/build"; then 341c03c5b1cSMartin Matuska src="$d/source" 342c03c5b1cSMartin Matuska build="$d/build" 343c03c5b1cSMartin Matuska break 344c03c5b1cSMartin Matuska fi 345c03c5b1cSMartin Matuska 346c03c5b1cSMartin Matuska if test -e "$d/build"; then 347c03c5b1cSMartin Matuska src="$d/build" 348c03c5b1cSMartin Matuska build="$d/build" 349c03c5b1cSMartin Matuska break 350c03c5b1cSMartin Matuska fi 351c03c5b1cSMartin Matuska done 352c03c5b1cSMartin Matuska 353c03c5b1cSMartin Matuska # the least reliable method 354c03c5b1cSMartin Matuska if test -z "$src"; then 355c03c5b1cSMartin Matuska src=$(ls -1d /usr/src/kernels/* /usr/src/linux-* \ 356c03c5b1cSMartin Matuska 2>/dev/null | grep -v obj | sort -Vr | head -1) 357c03c5b1cSMartin Matuska build="$src" 358c03c5b1cSMartin Matuska fi 359eda14cbcSMatt Macy ]) 360eda14cbcSMatt Macy 361c03c5b1cSMartin Matuska AS_IF([test -n "$src" && test -e "$src"], [ 362c03c5b1cSMartin Matuska kernelsrc=$(readlink -e "$src") 363eda14cbcSMatt Macy ], [ 364eda14cbcSMatt Macy kernelsrc="[Not found]" 365eda14cbcSMatt Macy ]) 366c03c5b1cSMartin Matuska AS_IF([test -n "$build" && test -e "$build"], [ 367c03c5b1cSMartin Matuska kernelbuild=$(readlink -e "$build") 368c03c5b1cSMartin Matuska ], [ 369c03c5b1cSMartin Matuska kernelbuild="[Not found]" 370c03c5b1cSMartin Matuska ]) 371eda14cbcSMatt Macy ], [ 372eda14cbcSMatt Macy AS_IF([test "$kernelsrc" = "NONE"], [ 373eda14cbcSMatt Macy kernsrcver=NONE 374eda14cbcSMatt Macy ]) 375eda14cbcSMatt Macy withlinux=yes 376eda14cbcSMatt Macy ]) 377eda14cbcSMatt Macy 378c03c5b1cSMartin Matuska AC_MSG_RESULT([done]) 379c03c5b1cSMartin Matuska AC_MSG_CHECKING([kernel source directory]) 380eda14cbcSMatt Macy AC_MSG_RESULT([$kernelsrc]) 381c03c5b1cSMartin Matuska AC_MSG_CHECKING([kernel build directory]) 382c03c5b1cSMartin Matuska AC_MSG_RESULT([$kernelbuild]) 383c03c5b1cSMartin Matuska AS_IF([test ! -d "$kernelsrc" || test ! -d "$kernelbuild"], [ 384eda14cbcSMatt Macy AC_MSG_ERROR([ 385eda14cbcSMatt Macy *** Please make sure the kernel devel package for your distribution 386eda14cbcSMatt Macy *** is installed and then try again. If that fails, you can specify the 387c03c5b1cSMartin Matuska *** location of the kernel source and build with the '--with-linux=PATH' and 388c03c5b1cSMartin Matuska *** '--with-linux-obj=PATH' options respectively.]) 389eda14cbcSMatt Macy ]) 390eda14cbcSMatt Macy 391eda14cbcSMatt Macy AC_MSG_CHECKING([kernel source version]) 392eda14cbcSMatt Macy utsrelease1=$kernelbuild/include/linux/version.h 393eda14cbcSMatt Macy utsrelease2=$kernelbuild/include/linux/utsrelease.h 394eda14cbcSMatt Macy utsrelease3=$kernelbuild/include/generated/utsrelease.h 395716fd348SMartin Matuska AS_IF([test -r $utsrelease1 && grep -qF UTS_RELEASE $utsrelease1], [ 3967877fdebSMatt Macy utsrelease=$utsrelease1 397716fd348SMartin Matuska ], [test -r $utsrelease2 && grep -qF UTS_RELEASE $utsrelease2], [ 3987877fdebSMatt Macy utsrelease=$utsrelease2 399716fd348SMartin Matuska ], [test -r $utsrelease3 && grep -qF UTS_RELEASE $utsrelease3], [ 4007877fdebSMatt Macy utsrelease=$utsrelease3 401eda14cbcSMatt Macy ]) 402eda14cbcSMatt Macy 4037877fdebSMatt Macy AS_IF([test -n "$utsrelease"], [ 4047877fdebSMatt Macy kernsrcver=$($AWK '/UTS_RELEASE/ { gsub(/"/, "", $[3]); print $[3] }' $utsrelease) 405eda14cbcSMatt Macy AS_IF([test -z "$kernsrcver"], [ 406eda14cbcSMatt Macy AC_MSG_RESULT([Not found]) 407eda14cbcSMatt Macy AC_MSG_ERROR([ 408eda14cbcSMatt Macy *** Cannot determine kernel version. 409eda14cbcSMatt Macy ]) 410eda14cbcSMatt Macy ]) 411eda14cbcSMatt Macy ], [ 412eda14cbcSMatt Macy AC_MSG_RESULT([Not found]) 413eda14cbcSMatt Macy if test "x$enable_linux_builtin" != xyes; then 414eda14cbcSMatt Macy AC_MSG_ERROR([ 415eda14cbcSMatt Macy *** Cannot find UTS_RELEASE definition. 416eda14cbcSMatt Macy ]) 417eda14cbcSMatt Macy else 418eda14cbcSMatt Macy AC_MSG_ERROR([ 419eda14cbcSMatt Macy *** Cannot find UTS_RELEASE definition. 420eda14cbcSMatt Macy *** Please run 'make prepare' inside the kernel source tree.]) 421eda14cbcSMatt Macy fi 422eda14cbcSMatt Macy ]) 423eda14cbcSMatt Macy 424eda14cbcSMatt Macy AC_MSG_RESULT([$kernsrcver]) 425eda14cbcSMatt Macy 4267a7741afSMartin Matuska AX_COMPARE_VERSION([$kernsrcver], [ge], [$ZFS_META_KVER_MIN], [], [ 427eda14cbcSMatt Macy AC_MSG_ERROR([ 428eda14cbcSMatt Macy *** Cannot build against kernel version $kernsrcver. 429eda14cbcSMatt Macy *** The minimum supported kernel version is $ZFS_META_KVER_MIN. 430eda14cbcSMatt Macy ]) 431eda14cbcSMatt Macy ]) 432eda14cbcSMatt Macy 4337a7741afSMartin Matuska AC_ARG_ENABLE([linux-experimental], 4347a7741afSMartin Matuska AS_HELP_STRING([--enable-linux-experimental], 4357a7741afSMartin Matuska [Allow building against some unsupported kernel versions])) 4367a7741afSMartin Matuska 4377a7741afSMartin Matuska AX_COMPARE_VERSION([$kernsrcver], [ge], [$ZFS_META_KVER_MAX], [ 4387a7741afSMartin Matuska AX_COMPARE_VERSION([$kernsrcver], [eq2], [$ZFS_META_KVER_MAX], [ 4397a7741afSMartin Matuska kern_max_version_ok=yes 4407a7741afSMartin Matuska ], [ 4417a7741afSMartin Matuska kern_max_version_ok=no 4427a7741afSMartin Matuska ]) 4437a7741afSMartin Matuska ], [ 4447a7741afSMartin Matuska kern_max_version_ok=yes 4457a7741afSMartin Matuska ]) 4467a7741afSMartin Matuska 4477a7741afSMartin Matuska AS_IF([test "x$kern_max_version_ok" != "xyes"], [ 4487a7741afSMartin Matuska AS_IF([test "x$enable_linux_experimental" == "xyes"], [ 4497a7741afSMartin Matuska AC_DEFINE(HAVE_LINUX_EXPERIMENTAL, 1, 4507a7741afSMartin Matuska [building against unsupported kernel version]) 4517a7741afSMartin Matuska ], [ 4527a7741afSMartin Matuska AC_MSG_ERROR([ 4537a7741afSMartin Matuska *** Cannot build against kernel version $kernsrcver. 4547a7741afSMartin Matuska *** The maximum supported kernel version is $ZFS_META_KVER_MAX. 4557a7741afSMartin Matuska ]) 4567a7741afSMartin Matuska ]) 4577a7741afSMartin Matuska ]) 4587a7741afSMartin Matuska 459eda14cbcSMatt Macy LINUX=${kernelsrc} 460eda14cbcSMatt Macy LINUX_OBJ=${kernelbuild} 461eda14cbcSMatt Macy LINUX_VERSION=${kernsrcver} 462eda14cbcSMatt Macy 463eda14cbcSMatt Macy AC_SUBST(LINUX) 464eda14cbcSMatt Macy AC_SUBST(LINUX_OBJ) 465eda14cbcSMatt Macy AC_SUBST(LINUX_VERSION) 466eda14cbcSMatt Macy]) 467eda14cbcSMatt Macy 4687a7741afSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_VERSION_WARNING], [ 4697a7741afSMartin Matuska AS_IF([test "x$enable_linux_experimental" = "xyes" && \ 4707a7741afSMartin Matuska test "x$kern_max_version_ok" != "xyes"], [ 4717a7741afSMartin Matuska AC_MSG_WARN([ 4727a7741afSMartin Matuska 4737a7741afSMartin Matuska You are building OpenZFS against Linux version $kernsrcver. 4747a7741afSMartin Matuska 4757a7741afSMartin Matuska This combination is considered EXPERIMENTAL by the OpenZFS project. 4767a7741afSMartin Matuska Even if it appears to build and run correctly, there may be bugs that 4777a7741afSMartin Matuska can cause SERIOUS DATA LOSS. 4787a7741afSMartin Matuska 4797a7741afSMartin Matuska YOU HAVE BEEN WARNED! 4807a7741afSMartin Matuska 4817a7741afSMartin Matuska If you choose to continue, we'd appreciate if you could report your 4827a7741afSMartin Matuska results on the OpenZFS issue tracker at: 4837a7741afSMartin Matuska 4847a7741afSMartin Matuska https://github.com/openzfs/zfs/issues/new 4857a7741afSMartin Matuska 4867a7741afSMartin Matuska Your feedback will help us prepare a new OpenZFS release that supports 4877a7741afSMartin Matuska this version of Linux. 4887a7741afSMartin Matuska ]) 4897a7741afSMartin Matuska ]) 4907a7741afSMartin Matuska]) 4917a7741afSMartin Matuska 492eda14cbcSMatt Macydnl # 493eda14cbcSMatt Macydnl # Detect the QAT module to be built against, QAT provides hardware 494eda14cbcSMatt Macydnl # acceleration for data compression: 495eda14cbcSMatt Macydnl # 496eda14cbcSMatt Macydnl # https://01.org/intel-quickassist-technology 497eda14cbcSMatt Macydnl # 498eda14cbcSMatt Macydnl # 1) Download and install QAT driver from the above link 499eda14cbcSMatt Macydnl # 2) Start QAT driver in your system: 500eda14cbcSMatt Macydnl # service qat_service start 501eda14cbcSMatt Macydnl # 3) Enable QAT in ZFS, e.g.: 502eda14cbcSMatt Macydnl # ./configure --with-qat=<qat-driver-path>/QAT1.6 503eda14cbcSMatt Macydnl # make 504eda14cbcSMatt Macydnl # 4) Set GZIP compression in ZFS dataset: 505eda14cbcSMatt Macydnl # zfs set compression = gzip <dataset> 506eda14cbcSMatt Macydnl # 507eda14cbcSMatt Macydnl # Then the data written to this ZFS pool is compressed by QAT accelerator 508eda14cbcSMatt Macydnl # automatically, and de-compressed by QAT when read from the pool. 509eda14cbcSMatt Macydnl # 510eda14cbcSMatt Macydnl # 1) Get QAT hardware statistics with: 511eda14cbcSMatt Macydnl # cat /proc/icp_dh895xcc_dev/qat 512eda14cbcSMatt Macydnl # 2) To disable QAT: 513eda14cbcSMatt Macydnl # insmod zfs.ko zfs_qat_disable=1 514eda14cbcSMatt Macydnl # 515eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_QAT], [ 516eda14cbcSMatt Macy AC_ARG_WITH([qat], 517eda14cbcSMatt Macy AS_HELP_STRING([--with-qat=PATH], 518eda14cbcSMatt Macy [Path to qat source]), 519eda14cbcSMatt Macy AS_IF([test "$withval" = "yes"], 520eda14cbcSMatt Macy AC_MSG_ERROR([--with-qat=PATH requires a PATH]), 521eda14cbcSMatt Macy [qatsrc="$withval"])) 522eda14cbcSMatt Macy 523eda14cbcSMatt Macy AC_ARG_WITH([qat-obj], 524eda14cbcSMatt Macy AS_HELP_STRING([--with-qat-obj=PATH], 525eda14cbcSMatt Macy [Path to qat build objects]), 526eda14cbcSMatt Macy [qatbuild="$withval"]) 527eda14cbcSMatt Macy 528eda14cbcSMatt Macy AS_IF([test ! -z "${qatsrc}"], [ 529eda14cbcSMatt Macy AC_MSG_CHECKING([qat source directory]) 530eda14cbcSMatt Macy AC_MSG_RESULT([$qatsrc]) 531eda14cbcSMatt Macy QAT_SRC="${qatsrc}/quickassist" 532eda14cbcSMatt Macy AS_IF([ test ! -e "$QAT_SRC/include/cpa.h"], [ 533eda14cbcSMatt Macy AC_MSG_ERROR([ 534eda14cbcSMatt Macy *** Please make sure the qat driver package is installed 535eda14cbcSMatt Macy *** and specify the location of the qat source with the 536eda14cbcSMatt Macy *** '--with-qat=PATH' option then try again. Failed to 537eda14cbcSMatt Macy *** find cpa.h in: 538eda14cbcSMatt Macy ${QAT_SRC}/include]) 539eda14cbcSMatt Macy ]) 540eda14cbcSMatt Macy ]) 541eda14cbcSMatt Macy 542eda14cbcSMatt Macy AS_IF([test ! -z "${qatsrc}"], [ 543eda14cbcSMatt Macy AC_MSG_CHECKING([qat build directory]) 544eda14cbcSMatt Macy AS_IF([test -z "$qatbuild"], [ 545eda14cbcSMatt Macy qatbuild="${qatsrc}/build" 546eda14cbcSMatt Macy ]) 547eda14cbcSMatt Macy 548eda14cbcSMatt Macy AC_MSG_RESULT([$qatbuild]) 549eda14cbcSMatt Macy QAT_OBJ=${qatbuild} 550eda14cbcSMatt Macy AS_IF([ ! test -e "$QAT_OBJ/icp_qa_al.ko" && ! test -e "$QAT_OBJ/qat_api.ko"], [ 551eda14cbcSMatt Macy AC_MSG_ERROR([ 552eda14cbcSMatt Macy *** Please make sure the qat driver is installed then try again. 553eda14cbcSMatt Macy *** Failed to find icp_qa_al.ko or qat_api.ko in: 554eda14cbcSMatt Macy $QAT_OBJ]) 555eda14cbcSMatt Macy ]) 556eda14cbcSMatt Macy 557eda14cbcSMatt Macy AC_SUBST(QAT_SRC) 558eda14cbcSMatt Macy AC_SUBST(QAT_OBJ) 559eda14cbcSMatt Macy 560eda14cbcSMatt Macy AC_DEFINE(HAVE_QAT, 1, 561eda14cbcSMatt Macy [qat is enabled and existed]) 562eda14cbcSMatt Macy ]) 563eda14cbcSMatt Macy 564eda14cbcSMatt Macy dnl # 565eda14cbcSMatt Macy dnl # Detect the name used for the QAT Module.symvers file. 566eda14cbcSMatt Macy dnl # 567eda14cbcSMatt Macy AS_IF([test ! -z "${qatsrc}"], [ 568eda14cbcSMatt Macy AC_MSG_CHECKING([qat file for module symbols]) 569eda14cbcSMatt Macy QAT_SYMBOLS=$QAT_SRC/lookaside/access_layer/src/Module.symvers 570eda14cbcSMatt Macy 571eda14cbcSMatt Macy AS_IF([test -r $QAT_SYMBOLS], [ 572eda14cbcSMatt Macy AC_MSG_RESULT([$QAT_SYMBOLS]) 573eda14cbcSMatt Macy AC_SUBST(QAT_SYMBOLS) 574eda14cbcSMatt Macy ],[ 575eda14cbcSMatt Macy AC_MSG_ERROR([ 576eda14cbcSMatt Macy *** Please make sure the qat driver is installed then try again. 577eda14cbcSMatt Macy *** Failed to find Module.symvers in: 578eda14cbcSMatt Macy $QAT_SYMBOLS 579eda14cbcSMatt Macy ]) 580eda14cbcSMatt Macy ]) 581eda14cbcSMatt Macy ]) 582eda14cbcSMatt Macy]) 583eda14cbcSMatt Macy 584eda14cbcSMatt Macydnl # 585eda14cbcSMatt Macydnl # ZFS_LINUX_CONFTEST_H 586eda14cbcSMatt Macydnl # 587eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_CONFTEST_H], [ 588eda14cbcSMatt Macytest -d build/$2 || mkdir -p build/$2 589eda14cbcSMatt Macycat - <<_ACEOF >build/$2/$2.h 590eda14cbcSMatt Macy$1 591eda14cbcSMatt Macy_ACEOF 592eda14cbcSMatt Macy]) 593eda14cbcSMatt Macy 594eda14cbcSMatt Macydnl # 595eda14cbcSMatt Macydnl # ZFS_LINUX_CONFTEST_C 596eda14cbcSMatt Macydnl # 597eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_CONFTEST_C], [ 598eda14cbcSMatt Macytest -d build/$2 || mkdir -p build/$2 599eda14cbcSMatt Macycat confdefs.h - <<_ACEOF >build/$2/$2.c 600eda14cbcSMatt Macy$1 601eda14cbcSMatt Macy_ACEOF 602eda14cbcSMatt Macy]) 603eda14cbcSMatt Macy 604eda14cbcSMatt Macydnl # 605eda14cbcSMatt Macydnl # ZFS_LINUX_CONFTEST_MAKEFILE 606eda14cbcSMatt Macydnl # 607eda14cbcSMatt Macydnl # $1 - test case name 608eda14cbcSMatt Macydnl # $2 - add to top-level Makefile 609eda14cbcSMatt Macydnl # $3 - additional build flags 610eda14cbcSMatt Macydnl # 611eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_CONFTEST_MAKEFILE], [ 612eda14cbcSMatt Macy test -d build || mkdir -p build 613eda14cbcSMatt Macy test -d build/$1 || mkdir -p build/$1 614eda14cbcSMatt Macy 615eda14cbcSMatt Macy file=build/$1/Makefile 616eda14cbcSMatt Macy 617eda14cbcSMatt Macy dnl # Example command line to manually build source. 618eda14cbcSMatt Macy cat - <<_ACEOF >$file 619eda14cbcSMatt Macy# Example command line to manually build source 620eda14cbcSMatt Macy# make modules -C $LINUX_OBJ $ARCH_UM M=$PWD/build/$1 621eda14cbcSMatt Macy 622eda14cbcSMatt Macyccflags-y := -Werror $FRAME_LARGER_THAN 623eda14cbcSMatt Macy_ACEOF 624eda14cbcSMatt Macy 625eda14cbcSMatt Macy dnl # Additional custom CFLAGS as requested. 626eda14cbcSMatt Macy m4_ifval($3, [echo "ccflags-y += $3" >>$file], []) 627eda14cbcSMatt Macy 628eda14cbcSMatt Macy dnl # Test case source 629eda14cbcSMatt Macy echo "obj-m := $1.o" >>$file 630eda14cbcSMatt Macy 631eda14cbcSMatt Macy AS_IF([test "x$2" = "xyes"], [echo "obj-m += $1/" >>build/Makefile], []) 632eda14cbcSMatt Macy]) 633eda14cbcSMatt Macy 634eda14cbcSMatt Macydnl # 635eda14cbcSMatt Macydnl # ZFS_LINUX_TEST_PROGRAM(C)([PROLOGUE], [BODY]) 636eda14cbcSMatt Macydnl # 637eda14cbcSMatt Macym4_define([ZFS_LINUX_TEST_PROGRAM], [ 6387877fdebSMatt Macy#include <linux/module.h> 639eda14cbcSMatt Macy$1 6407877fdebSMatt Macy 641eda14cbcSMatt Macyint 642eda14cbcSMatt Macymain (void) 643eda14cbcSMatt Macy{ 644eda14cbcSMatt Macy$2 645eda14cbcSMatt Macy ; 646eda14cbcSMatt Macy return 0; 647eda14cbcSMatt Macy} 6487877fdebSMatt Macy 6497877fdebSMatt MacyMODULE_DESCRIPTION("conftest"); 6507877fdebSMatt MacyMODULE_AUTHOR(ZFS_META_AUTHOR); 6517877fdebSMatt MacyMODULE_VERSION(ZFS_META_VERSION "-" ZFS_META_RELEASE); 6527877fdebSMatt MacyMODULE_LICENSE($3); 653eda14cbcSMatt Macy]) 654eda14cbcSMatt Macy 655eda14cbcSMatt Macydnl # 656eda14cbcSMatt Macydnl # ZFS_LINUX_TEST_REMOVE 657eda14cbcSMatt Macydnl # 658eda14cbcSMatt Macydnl # Removes the specified test source and results. 659eda14cbcSMatt Macydnl # 660eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TEST_REMOVE], [ 661eda14cbcSMatt Macy test -d build/$1 && rm -Rf build/$1 662eda14cbcSMatt Macy test -f build/Makefile && sed '/$1/d' build/Makefile 663eda14cbcSMatt Macy]) 664eda14cbcSMatt Macy 665eda14cbcSMatt Macydnl # 666eda14cbcSMatt Macydnl # ZFS_LINUX_COMPILE 667eda14cbcSMatt Macydnl # 668eda14cbcSMatt Macydnl # $1 - build dir 669eda14cbcSMatt Macydnl # $2 - test command 670eda14cbcSMatt Macydnl # $3 - pass command 671eda14cbcSMatt Macydnl # $4 - fail command 672eda14cbcSMatt Macydnl # $5 - set KBUILD_MODPOST_NOFINAL='yes' 673eda14cbcSMatt Macydnl # $6 - set KBUILD_MODPOST_WARN='yes' 674eda14cbcSMatt Macydnl # 675eda14cbcSMatt Macydnl # Used internally by ZFS_LINUX_TEST_{COMPILE,MODPOST} 676eda14cbcSMatt Macydnl # 677eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_COMPILE], [ 678c03c5b1cSMartin Matuska AC_ARG_VAR([KERNEL_CC], [C compiler for 679c03c5b1cSMartin Matuska building kernel modules]) 680c03c5b1cSMartin Matuska AC_ARG_VAR([KERNEL_LD], [Linker for 681c03c5b1cSMartin Matuska building kernel modules]) 682c03c5b1cSMartin Matuska AC_ARG_VAR([KERNEL_LLVM], [Binary option to 683c03c5b1cSMartin Matuska build kernel modules with LLVM/CLANG toolchain]) 684*dd215568SMartin Matuska AC_ARG_VAR([KERNEL_CROSS_COMPILE], [Cross compile prefix 685*dd215568SMartin Matuska for kernel module builds]) 686*dd215568SMartin Matuska AC_ARG_VAR([KERNEL_ARCH], [Architecture to build kernel modules for]) 687eda14cbcSMatt Macy AC_TRY_COMMAND([ 688eda14cbcSMatt Macy KBUILD_MODPOST_NOFINAL="$5" KBUILD_MODPOST_WARN="$6" 689716fd348SMartin Matuska make modules -k -j$TEST_JOBS ${KERNEL_CC:+CC=$KERNEL_CC} 690716fd348SMartin Matuska ${KERNEL_LD:+LD=$KERNEL_LD} ${KERNEL_LLVM:+LLVM=$KERNEL_LLVM} 691716fd348SMartin Matuska CONFIG_MODULES=y CFLAGS_MODULE=-DCONFIG_MODULES 692*dd215568SMartin Matuska ${KERNEL_CROSS_COMPILE:+CROSS_COMPILE=$KERNEL_CROSS_COMPILE} 693*dd215568SMartin Matuska ${KERNEL_ARCH:+ARCH=$KERNEL_ARCH} 694716fd348SMartin Matuska -C $LINUX_OBJ $ARCH_UM M=$PWD/$1 >$1/build.log 2>&1]) 695eda14cbcSMatt Macy AS_IF([AC_TRY_COMMAND([$2])], [$3], [$4]) 696eda14cbcSMatt Macy]) 697eda14cbcSMatt Macy 698eda14cbcSMatt Macydnl # 699eda14cbcSMatt Macydnl # ZFS_LINUX_TEST_COMPILE 700eda14cbcSMatt Macydnl # 701eda14cbcSMatt Macydnl # Perform a full compile excluding the final modpost phase. 702eda14cbcSMatt Macydnl # 703eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TEST_COMPILE], [ 704eda14cbcSMatt Macy ZFS_LINUX_COMPILE([$2], [test -f $2/build.log], [ 705eda14cbcSMatt Macy mv $2/Makefile $2/Makefile.compile.$1 706eda14cbcSMatt Macy mv $2/build.log $2/build.log.$1 707eda14cbcSMatt Macy ],[ 708eda14cbcSMatt Macy AC_MSG_ERROR([ 709eda14cbcSMatt Macy *** Unable to compile test source to determine kernel interfaces.]) 710eda14cbcSMatt Macy ], [yes], []) 711eda14cbcSMatt Macy]) 712eda14cbcSMatt Macy 713eda14cbcSMatt Macydnl # 714eda14cbcSMatt Macydnl # ZFS_LINUX_TEST_MODPOST 715eda14cbcSMatt Macydnl # 716eda14cbcSMatt Macydnl # Perform a full compile including the modpost phase. This may 717eda14cbcSMatt Macydnl # be an incremental build if the objects have already been built. 718eda14cbcSMatt Macydnl # 719eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TEST_MODPOST], [ 720eda14cbcSMatt Macy ZFS_LINUX_COMPILE([$2], [test -f $2/build.log], [ 721eda14cbcSMatt Macy mv $2/Makefile $2/Makefile.modpost.$1 722eda14cbcSMatt Macy cat $2/build.log >>build/build.log.$1 723eda14cbcSMatt Macy ],[ 724eda14cbcSMatt Macy AC_MSG_ERROR([ 725eda14cbcSMatt Macy *** Unable to modpost test source to determine kernel interfaces.]) 726eda14cbcSMatt Macy ], [], [yes]) 727eda14cbcSMatt Macy]) 728eda14cbcSMatt Macy 729eda14cbcSMatt Macydnl # 730eda14cbcSMatt Macydnl # Perform the compilation of the test cases in two phases. 731eda14cbcSMatt Macydnl # 732eda14cbcSMatt Macydnl # Phase 1) attempt to build the object files for all of the tests 733eda14cbcSMatt Macydnl # defined by the ZFS_LINUX_TEST_SRC macro. But do not 734eda14cbcSMatt Macydnl # perform the final modpost stage. 735eda14cbcSMatt Macydnl # 736eda14cbcSMatt Macydnl # Phase 2) disable all tests which failed the initial compilation, 737eda14cbcSMatt Macydnl # then invoke the final modpost step for the remaining tests. 738eda14cbcSMatt Macydnl # 739eda14cbcSMatt Macydnl # This allows us efficiently build the test cases in parallel while 740eda14cbcSMatt Macydnl # remaining resilient to build failures which are expected when 741eda14cbcSMatt Macydnl # detecting the available kernel interfaces. 742eda14cbcSMatt Macydnl # 743eda14cbcSMatt Macydnl # The maximum allowed parallelism can be controlled by setting the 744eda14cbcSMatt Macydnl # TEST_JOBS environment variable. Otherwise, it default to $(nproc). 745eda14cbcSMatt Macydnl # 746eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TEST_COMPILE_ALL], [ 747eda14cbcSMatt Macy dnl # Phase 1 - Compilation only, final linking is skipped. 748eda14cbcSMatt Macy ZFS_LINUX_TEST_COMPILE([$1], [build]) 749eda14cbcSMatt Macy 750eda14cbcSMatt Macy dnl # 751eda14cbcSMatt Macy dnl # Phase 2 - When building external modules disable test cases 752eda14cbcSMatt Macy dnl # which failed to compile and invoke modpost to verify the 753eda14cbcSMatt Macy dnl # final linking. 754eda14cbcSMatt Macy dnl # 755eda14cbcSMatt Macy dnl # Test names suffixed with '_license' call modpost independently 756eda14cbcSMatt Macy dnl # to ensure that a single incompatibility does not result in the 757eda14cbcSMatt Macy dnl # modpost phase exiting early. This check is not performed on 758eda14cbcSMatt Macy dnl # every symbol since the majority are compatible and doing so 759eda14cbcSMatt Macy dnl # would significantly slow down this phase. 760eda14cbcSMatt Macy dnl # 761eda14cbcSMatt Macy dnl # When configuring for builtin (--enable-linux-builtin) 762eda14cbcSMatt Macy dnl # fake the linking step artificially create the expected .ko 763eda14cbcSMatt Macy dnl # files for tests which did compile. This is required for 764eda14cbcSMatt Macy dnl # kernels which do not have loadable module support or have 765eda14cbcSMatt Macy dnl # not yet been built. 766eda14cbcSMatt Macy dnl # 767eda14cbcSMatt Macy AS_IF([test "x$enable_linux_builtin" = "xno"], [ 768eda14cbcSMatt Macy for dir in $(awk '/^obj-m/ { print [$]3 }' \ 769eda14cbcSMatt Macy build/Makefile.compile.$1); do 770eda14cbcSMatt Macy name=${dir%/} 771eda14cbcSMatt Macy AS_IF([test -f build/$name/$name.o], [ 772eda14cbcSMatt Macy AS_IF([test "${name##*_}" = "license"], [ 773eda14cbcSMatt Macy ZFS_LINUX_TEST_MODPOST([$1], 774eda14cbcSMatt Macy [build/$name]) 775eda14cbcSMatt Macy echo "obj-n += $dir" >>build/Makefile 776eda14cbcSMatt Macy ], [ 777eda14cbcSMatt Macy echo "obj-m += $dir" >>build/Makefile 778eda14cbcSMatt Macy ]) 779eda14cbcSMatt Macy ], [ 780eda14cbcSMatt Macy echo "obj-n += $dir" >>build/Makefile 781eda14cbcSMatt Macy ]) 782eda14cbcSMatt Macy done 783eda14cbcSMatt Macy 784eda14cbcSMatt Macy ZFS_LINUX_TEST_MODPOST([$1], [build]) 785eda14cbcSMatt Macy ], [ 786eda14cbcSMatt Macy for dir in $(awk '/^obj-m/ { print [$]3 }' \ 787eda14cbcSMatt Macy build/Makefile.compile.$1); do 788eda14cbcSMatt Macy name=${dir%/} 789eda14cbcSMatt Macy AS_IF([test -f build/$name/$name.o], [ 790eda14cbcSMatt Macy touch build/$name/$name.ko 791eda14cbcSMatt Macy ]) 792eda14cbcSMatt Macy done 793eda14cbcSMatt Macy ]) 794eda14cbcSMatt Macy]) 795eda14cbcSMatt Macy 796eda14cbcSMatt Macydnl # 797eda14cbcSMatt Macydnl # ZFS_LINUX_TEST_SRC 798eda14cbcSMatt Macydnl # 799eda14cbcSMatt Macydnl # $1 - name 800eda14cbcSMatt Macydnl # $2 - global 801eda14cbcSMatt Macydnl # $3 - source 802eda14cbcSMatt Macydnl # $4 - extra cflags 803eda14cbcSMatt Macydnl # $5 - check license-compatibility 804eda14cbcSMatt Macydnl # 8057877fdebSMatt Macydnl # Check if the test source is buildable at all and then if it is 8067877fdebSMatt Macydnl # license compatible. 8077877fdebSMatt Macydnl # 808eda14cbcSMatt Macydnl # N.B because all of the test cases are compiled in parallel they 809eda14cbcSMatt Macydnl # must never depend on the results of previous tests. Each test 810eda14cbcSMatt Macydnl # needs to be entirely independent. 811eda14cbcSMatt Macydnl # 812eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TEST_SRC], [ 8137877fdebSMatt Macy ZFS_LINUX_CONFTEST_C([ZFS_LINUX_TEST_PROGRAM([[$2]], [[$3]], 8147877fdebSMatt Macy [["Dual BSD/GPL"]])], [$1]) 815eda14cbcSMatt Macy ZFS_LINUX_CONFTEST_MAKEFILE([$1], [yes], [$4]) 816eda14cbcSMatt Macy 817eda14cbcSMatt Macy AS_IF([ test -n "$5" ], [ 8187877fdebSMatt Macy ZFS_LINUX_CONFTEST_C([ZFS_LINUX_TEST_PROGRAM( 8197877fdebSMatt Macy [[$2]], [[$3]], [[$5]])], [$1_license]) 820eda14cbcSMatt Macy ZFS_LINUX_CONFTEST_MAKEFILE([$1_license], [yes], [$4]) 821eda14cbcSMatt Macy ]) 822eda14cbcSMatt Macy]) 823eda14cbcSMatt Macy 824eda14cbcSMatt Macydnl # 825eda14cbcSMatt Macydnl # ZFS_LINUX_TEST_RESULT 826eda14cbcSMatt Macydnl # 827eda14cbcSMatt Macydnl # $1 - name of a test source (ZFS_LINUX_TEST_SRC) 828eda14cbcSMatt Macydnl # $2 - run on success (valid .ko generated) 829eda14cbcSMatt Macydnl # $3 - run on failure (unable to compile) 830eda14cbcSMatt Macydnl # 831eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TEST_RESULT], [ 832eda14cbcSMatt Macy AS_IF([test -d build/$1], [ 833eda14cbcSMatt Macy AS_IF([test -f build/$1/$1.ko], [$2], [$3]) 834eda14cbcSMatt Macy ], [ 835eda14cbcSMatt Macy AC_MSG_ERROR([ 836eda14cbcSMatt Macy *** No matching source for the "$1" test, check that 837eda14cbcSMatt Macy *** both the test source and result macros refer to the same name. 838eda14cbcSMatt Macy ]) 839eda14cbcSMatt Macy ]) 840eda14cbcSMatt Macy]) 841eda14cbcSMatt Macy 842eda14cbcSMatt Macydnl # 843eda14cbcSMatt Macydnl # ZFS_LINUX_TEST_ERROR 844eda14cbcSMatt Macydnl # 845eda14cbcSMatt Macydnl # Generic error message which can be used when none of the expected 846eda14cbcSMatt Macydnl # kernel interfaces were detected. 847eda14cbcSMatt Macydnl # 848eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TEST_ERROR], [ 849eda14cbcSMatt Macy AC_MSG_ERROR([ 850eda14cbcSMatt Macy *** None of the expected "$1" interfaces were detected. 851eda14cbcSMatt Macy *** This may be because your kernel version is newer than what is 852eda14cbcSMatt Macy *** supported, or you are using a patched custom kernel with 853eda14cbcSMatt Macy *** incompatible modifications. 854eda14cbcSMatt Macy *** 855eda14cbcSMatt Macy *** ZFS Version: $ZFS_META_ALIAS 856eda14cbcSMatt Macy *** Compatible Kernels: $ZFS_META_KVER_MIN - $ZFS_META_KVER_MAX 857eda14cbcSMatt Macy ]) 858eda14cbcSMatt Macy]) 859eda14cbcSMatt Macy 860eda14cbcSMatt Macydnl # 861eda14cbcSMatt Macydnl # ZFS_LINUX_TEST_RESULT_SYMBOL 862eda14cbcSMatt Macydnl # 863eda14cbcSMatt Macydnl # Like ZFS_LINUX_TEST_RESULT except ZFS_CHECK_SYMBOL_EXPORT is called to 864eda14cbcSMatt Macydnl # verify symbol exports, unless --enable-linux-builtin was provided to 865eda14cbcSMatt Macydnl # configure. 866eda14cbcSMatt Macydnl # 867eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TEST_RESULT_SYMBOL], [ 868eda14cbcSMatt Macy AS_IF([ ! test -f build/$1/$1.ko], [ 869eda14cbcSMatt Macy $5 870eda14cbcSMatt Macy ], [ 871eda14cbcSMatt Macy AS_IF([test "x$enable_linux_builtin" != "xyes"], [ 872eda14cbcSMatt Macy ZFS_CHECK_SYMBOL_EXPORT([$2], [$3], [$4], [$5]) 873eda14cbcSMatt Macy ], [ 874eda14cbcSMatt Macy $4 875eda14cbcSMatt Macy ]) 876eda14cbcSMatt Macy ]) 877eda14cbcSMatt Macy]) 878eda14cbcSMatt Macy 879eda14cbcSMatt Macydnl # 880eda14cbcSMatt Macydnl # ZFS_LINUX_COMPILE_IFELSE 881eda14cbcSMatt Macydnl # 882eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_COMPILE_IFELSE], [ 883eda14cbcSMatt Macy ZFS_LINUX_TEST_REMOVE([conftest]) 884eda14cbcSMatt Macy 885eda14cbcSMatt Macy m4_ifvaln([$1], [ZFS_LINUX_CONFTEST_C([$1], [conftest])]) 886eda14cbcSMatt Macy m4_ifvaln([$5], [ZFS_LINUX_CONFTEST_H([$5], [conftest])], 887eda14cbcSMatt Macy [ZFS_LINUX_CONFTEST_H([], [conftest])]) 888eda14cbcSMatt Macy 889eda14cbcSMatt Macy ZFS_LINUX_CONFTEST_MAKEFILE([conftest], [no], 890eda14cbcSMatt Macy [m4_ifvaln([$5], [-I$PWD/build/conftest], [])]) 891eda14cbcSMatt Macy ZFS_LINUX_COMPILE([build/conftest], [$2], [$3], [$4], [], []) 892eda14cbcSMatt Macy]) 893eda14cbcSMatt Macy 894eda14cbcSMatt Macydnl # 895eda14cbcSMatt Macydnl # ZFS_LINUX_TRY_COMPILE 896eda14cbcSMatt Macydnl # 897eda14cbcSMatt Macydnl # $1 - global 898eda14cbcSMatt Macydnl # $2 - source 899eda14cbcSMatt Macydnl # $3 - run on success (valid .ko generated) 900eda14cbcSMatt Macydnl # $4 - run on failure (unable to compile) 901eda14cbcSMatt Macydnl # 902eda14cbcSMatt Macydnl # When configuring as builtin (--enable-linux-builtin) for kernels 903eda14cbcSMatt Macydnl # without loadable module support (CONFIG_MODULES=n) only the object 904eda14cbcSMatt Macydnl # file is created. See ZFS_LINUX_TEST_COMPILE_ALL for details. 905eda14cbcSMatt Macydnl # 906eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TRY_COMPILE], [ 907eda14cbcSMatt Macy AS_IF([test "x$enable_linux_builtin" = "xyes"], [ 908eda14cbcSMatt Macy ZFS_LINUX_COMPILE_IFELSE( 9097877fdebSMatt Macy [ZFS_LINUX_TEST_PROGRAM([[$1]], [[$2]], 9107877fdebSMatt Macy [[ZFS_META_LICENSE]])], 911eda14cbcSMatt Macy [test -f build/conftest/conftest.o], [$3], [$4]) 912eda14cbcSMatt Macy ], [ 913eda14cbcSMatt Macy ZFS_LINUX_COMPILE_IFELSE( 9147877fdebSMatt Macy [ZFS_LINUX_TEST_PROGRAM([[$1]], [[$2]], 9157877fdebSMatt Macy [[ZFS_META_LICENSE]])], 916eda14cbcSMatt Macy [test -f build/conftest/conftest.ko], [$3], [$4]) 917eda14cbcSMatt Macy ]) 918eda14cbcSMatt Macy]) 919eda14cbcSMatt Macy 920eda14cbcSMatt Macydnl # 921eda14cbcSMatt Macydnl # ZFS_CHECK_SYMBOL_EXPORT 922eda14cbcSMatt Macydnl # 923eda14cbcSMatt Macydnl # Check if a symbol is exported on not by consulting the symbols 924eda14cbcSMatt Macydnl # file, or optionally the source code. 925eda14cbcSMatt Macydnl # 926eda14cbcSMatt MacyAC_DEFUN([ZFS_CHECK_SYMBOL_EXPORT], [ 927eda14cbcSMatt Macy grep -q -E '[[[:space:]]]$1[[[:space:]]]' \ 928eda14cbcSMatt Macy $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null 929eda14cbcSMatt Macy rc=$? 930eda14cbcSMatt Macy if test $rc -ne 0; then 931eda14cbcSMatt Macy export=0 932eda14cbcSMatt Macy for file in $2; do 933eda14cbcSMatt Macy grep -q -E "EXPORT_SYMBOL.*($1)" \ 934eda14cbcSMatt Macy "$LINUX/$file" 2>/dev/null 935eda14cbcSMatt Macy rc=$? 936eda14cbcSMatt Macy if test $rc -eq 0; then 937eda14cbcSMatt Macy export=1 938eda14cbcSMatt Macy break; 939eda14cbcSMatt Macy fi 940eda14cbcSMatt Macy done 941eda14cbcSMatt Macy if test $export -eq 0; then : 942eda14cbcSMatt Macy $4 943eda14cbcSMatt Macy else : 944eda14cbcSMatt Macy $3 945eda14cbcSMatt Macy fi 946eda14cbcSMatt Macy else : 947eda14cbcSMatt Macy $3 948eda14cbcSMatt Macy fi 949eda14cbcSMatt Macy]) 950eda14cbcSMatt Macy 951eda14cbcSMatt Macydnl # 952eda14cbcSMatt Macydnl # ZFS_LINUX_TRY_COMPILE_SYMBOL 953eda14cbcSMatt Macydnl # 954eda14cbcSMatt Macydnl # Like ZFS_LINUX_TRY_COMPILER except ZFS_CHECK_SYMBOL_EXPORT is called 955eda14cbcSMatt Macydnl # to verify symbol exports, unless --enable-linux-builtin was provided 956eda14cbcSMatt Macydnl # to configure. 957eda14cbcSMatt Macydnl # 958eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TRY_COMPILE_SYMBOL], [ 959eda14cbcSMatt Macy ZFS_LINUX_TRY_COMPILE([$1], [$2], [rc=0], [rc=1]) 960eda14cbcSMatt Macy if test $rc -ne 0; then : 961eda14cbcSMatt Macy $6 962eda14cbcSMatt Macy else 963eda14cbcSMatt Macy if test "x$enable_linux_builtin" != xyes; then 964eda14cbcSMatt Macy ZFS_CHECK_SYMBOL_EXPORT([$3], [$4], [rc=0], [rc=1]) 965eda14cbcSMatt Macy fi 966eda14cbcSMatt Macy if test $rc -ne 0; then : 967eda14cbcSMatt Macy $6 968eda14cbcSMatt Macy else : 969eda14cbcSMatt Macy $5 970eda14cbcSMatt Macy fi 971eda14cbcSMatt Macy fi 972eda14cbcSMatt Macy]) 973eda14cbcSMatt Macy 974eda14cbcSMatt Macydnl # 975eda14cbcSMatt Macydnl # ZFS_LINUX_TRY_COMPILE_HEADER 976eda14cbcSMatt Macydnl # like ZFS_LINUX_TRY_COMPILE, except the contents conftest.h are 977eda14cbcSMatt Macydnl # provided via the fifth parameter 978eda14cbcSMatt Macydnl # 979eda14cbcSMatt MacyAC_DEFUN([ZFS_LINUX_TRY_COMPILE_HEADER], [ 980dbd5678dSMartin Matuska AS_IF([test "x$enable_linux_builtin" = "xyes"], [ 981eda14cbcSMatt Macy ZFS_LINUX_COMPILE_IFELSE( 982dbd5678dSMartin Matuska [ZFS_LINUX_TEST_PROGRAM([[$1]], [[$2]], 983dbd5678dSMartin Matuska [[ZFS_META_LICENSE]])], 984dbd5678dSMartin Matuska [test -f build/conftest/conftest.o], [$3], [$4], [$5]) 985dbd5678dSMartin Matuska ], [ 986dbd5678dSMartin Matuska ZFS_LINUX_COMPILE_IFELSE( 987dbd5678dSMartin Matuska [ZFS_LINUX_TEST_PROGRAM([[$1]], [[$2]], 988dbd5678dSMartin Matuska [[ZFS_META_LICENSE]])], 989dbd5678dSMartin Matuska [test -f build/conftest/conftest.ko], [$3], [$4], [$5]) 990dbd5678dSMartin Matuska ]) 991eda14cbcSMatt Macy]) 99215f0b8c3SMartin Matuska 99315f0b8c3SMartin Matuskadnl # 99415f0b8c3SMartin Matuskadnl # AS_VERSION_COMPARE_LE 99515f0b8c3SMartin Matuskadnl # like AS_VERSION_COMPARE_LE, but runs $3 if (and only if) $1 <= $2 99615f0b8c3SMartin Matuskadnl # AS_VERSION_COMPARE_LE (version-1, version-2, [action-if-less-or-equal], [action-if-greater]) 99715f0b8c3SMartin Matuskadnl # 99815f0b8c3SMartin MatuskaAC_DEFUN([AS_VERSION_COMPARE_LE], [ 99915f0b8c3SMartin Matuska AS_VERSION_COMPARE([$1], [$2], [$3], [$3], [$4]) 100015f0b8c3SMartin Matuska]) 100115f0b8c3SMartin Matuska 100215f0b8c3SMartin Matuskadnl # 100315f0b8c3SMartin Matuskadnl # ZFS_LINUX_REQUIRE_API 100415f0b8c3SMartin Matuskadnl # like ZFS_LINUX_TEST_ERROR, except only fails if the kernel is 100515f0b8c3SMartin Matuskadnl # at least some specified version. 100615f0b8c3SMartin Matuskadnl # 100715f0b8c3SMartin MatuskaAC_DEFUN([ZFS_LINUX_REQUIRE_API], [ 100815f0b8c3SMartin Matuska AS_VERSION_COMPARE_LE([$2], [$kernsrcver], [ 100915f0b8c3SMartin Matuska AC_MSG_ERROR([ 101015f0b8c3SMartin Matuska *** None of the expected "$1" interfaces were detected. This 101115f0b8c3SMartin Matuska *** interface is expected for kernels version "$2" and above. 101215f0b8c3SMartin Matuska *** This may be because your kernel version is newer than what is 101315f0b8c3SMartin Matuska *** supported, or you are using a patched custom kernel with 101415f0b8c3SMartin Matuska *** incompatible modifications. Newer kernels may have incompatible 101515f0b8c3SMartin Matuska *** APIs. 101615f0b8c3SMartin Matuska *** 101715f0b8c3SMartin Matuska *** ZFS Version: $ZFS_META_ALIAS 101815f0b8c3SMartin Matuska *** Compatible Kernels: $ZFS_META_KVER_MIN - $ZFS_META_KVER_MAX 101915f0b8c3SMartin Matuska ]) 102015f0b8c3SMartin Matuska ], [ 102115f0b8c3SMartin Matuska AC_MSG_RESULT(no) 102215f0b8c3SMartin Matuska ]) 102315f0b8c3SMartin Matuska]) 1024