1eda14cbcSMatt Macydnl # 2eda14cbcSMatt Macydnl # Certain kernel build options are not supported. These must be 3eda14cbcSMatt Macydnl # detected at configure time and cause a build failure. Otherwise 4eda14cbcSMatt Macydnl # modules may be successfully built that behave incorrectly. 5eda14cbcSMatt Macydnl # 6eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEFINED], [ 7*716fd348SMartin Matuska ZFS_AC_KERNEL_SRC_CONFIG_MODULES 8*716fd348SMartin Matuska ZFS_AC_KERNEL_SRC_CONFIG_BLOCK 9eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_CONFIG_DEBUG_LOCK_ALLOC 10eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_CONFIG_TRIM_UNUSED_KSYMS 11eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_DEFLATE 12*716fd348SMartin Matuska ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_INFLATE 13eda14cbcSMatt Macy 14eda14cbcSMatt Macy AC_MSG_CHECKING([for kernel config option compatibility]) 15eda14cbcSMatt Macy ZFS_LINUX_TEST_COMPILE_ALL([config]) 16eda14cbcSMatt Macy AC_MSG_RESULT([done]) 17eda14cbcSMatt Macy 18*716fd348SMartin Matuska ZFS_AC_KERNEL_CONFIG_MODULES 19*716fd348SMartin Matuska ZFS_AC_KERNEL_CONFIG_BLOCK 20eda14cbcSMatt Macy ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC 21eda14cbcSMatt Macy ZFS_AC_KERNEL_CONFIG_TRIM_UNUSED_KSYMS 22eda14cbcSMatt Macy ZFS_AC_KERNEL_CONFIG_ZLIB_DEFLATE 23*716fd348SMartin Matuska ZFS_AC_KERNEL_CONFIG_ZLIB_INFLATE 24*716fd348SMartin Matuska]) 25*716fd348SMartin Matuska 26*716fd348SMartin Matuskadnl # 27*716fd348SMartin Matuskadnl # Check CONFIG_BLOCK 28*716fd348SMartin Matuskadnl # 29*716fd348SMartin Matuskadnl # Verify the kernel has CONFIG_BLOCK support enabled. 30*716fd348SMartin Matuskadnl # 31*716fd348SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_BLOCK], [ 32*716fd348SMartin Matuska ZFS_LINUX_TEST_SRC([config_block], [ 33*716fd348SMartin Matuska #if !defined(CONFIG_BLOCK) 34*716fd348SMartin Matuska #error CONFIG_BLOCK not defined 35*716fd348SMartin Matuska #endif 36*716fd348SMartin Matuska ],[]) 37*716fd348SMartin Matuska]) 38*716fd348SMartin Matuska 39*716fd348SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_CONFIG_BLOCK], [ 40*716fd348SMartin Matuska AC_MSG_CHECKING([whether CONFIG_BLOCK is defined]) 41*716fd348SMartin Matuska ZFS_LINUX_TEST_RESULT([config_block], [ 42*716fd348SMartin Matuska AC_MSG_RESULT([yes]) 43*716fd348SMartin Matuska ],[ 44*716fd348SMartin Matuska AC_MSG_RESULT([no]) 45*716fd348SMartin Matuska AC_MSG_ERROR([ 46*716fd348SMartin Matuska *** This kernel does not include the required block device support. 47*716fd348SMartin Matuska *** Rebuild the kernel with CONFIG_BLOCK=y set.]) 48*716fd348SMartin Matuska ]) 49eda14cbcSMatt Macy]) 50eda14cbcSMatt Macy 51eda14cbcSMatt Macydnl # 52eda14cbcSMatt Macydnl # Check CONFIG_DEBUG_LOCK_ALLOC 53eda14cbcSMatt Macydnl # 54eda14cbcSMatt Macydnl # This is typically only set for debug kernels because it comes with 55eda14cbcSMatt Macydnl # a performance penalty. However, when it is set it maps the non-GPL 56eda14cbcSMatt Macydnl # symbol mutex_lock() to the GPL-only mutex_lock_nested() symbol. 57eda14cbcSMatt Macydnl # This will cause a failure at link time which we'd rather know about 58eda14cbcSMatt Macydnl # at compile time. 59eda14cbcSMatt Macydnl # 60eda14cbcSMatt Macydnl # Since we plan to pursue making mutex_lock_nested() a non-GPL symbol 61eda14cbcSMatt Macydnl # with the upstream community we add a check to detect this case. 62eda14cbcSMatt Macydnl # 63eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_DEBUG_LOCK_ALLOC], [ 64eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([config_debug_lock_alloc], [ 65eda14cbcSMatt Macy #include <linux/mutex.h> 66eda14cbcSMatt Macy ],[ 67eda14cbcSMatt Macy struct mutex lock; 68eda14cbcSMatt Macy 69eda14cbcSMatt Macy mutex_init(&lock); 70eda14cbcSMatt Macy mutex_lock(&lock); 71eda14cbcSMatt Macy mutex_unlock(&lock); 727877fdebSMatt Macy ], [], [ZFS_META_LICENSE]) 73eda14cbcSMatt Macy]) 74eda14cbcSMatt Macy 75eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC], [ 76eda14cbcSMatt Macy AC_MSG_CHECKING([whether mutex_lock() is GPL-only]) 77c40487d4SMatt Macy ZFS_LINUX_TEST_RESULT([config_debug_lock_alloc_license], [ 78eda14cbcSMatt Macy AC_MSG_RESULT(no) 79eda14cbcSMatt Macy ],[ 80eda14cbcSMatt Macy AC_MSG_RESULT(yes) 81eda14cbcSMatt Macy AC_MSG_ERROR([ 82eda14cbcSMatt Macy *** Kernel built with CONFIG_DEBUG_LOCK_ALLOC which is incompatible 83eda14cbcSMatt Macy *** with the CDDL license and will prevent the module linking stage 84eda14cbcSMatt Macy *** from succeeding. You must rebuild your kernel without this 85eda14cbcSMatt Macy *** option enabled.]) 86eda14cbcSMatt Macy ]) 87eda14cbcSMatt Macy]) 88eda14cbcSMatt Macy 89eda14cbcSMatt Macydnl # 90*716fd348SMartin Matuskadnl # Check CONFIG_MODULES 91*716fd348SMartin Matuskadnl # 92*716fd348SMartin Matuskadnl # Verify the kernel has CONFIG_MODULES support enabled. 93*716fd348SMartin Matuskadnl # 94*716fd348SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_MODULES], [ 95*716fd348SMartin Matuska ZFS_LINUX_TEST_SRC([config_modules], [ 96*716fd348SMartin Matuska #if !defined(CONFIG_MODULES) 97*716fd348SMartin Matuska #error CONFIG_MODULES not defined 98*716fd348SMartin Matuska #endif 99*716fd348SMartin Matuska ],[]) 100*716fd348SMartin Matuska]) 101*716fd348SMartin Matuska 102*716fd348SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_CONFIG_MODULES], [ 103*716fd348SMartin Matuska AC_MSG_CHECKING([whether CONFIG_MODULES is defined]) 104*716fd348SMartin Matuska AS_IF([test "x$enable_linux_builtin" != xyes], [ 105*716fd348SMartin Matuska ZFS_LINUX_TEST_RESULT([config_modules], [ 106*716fd348SMartin Matuska AC_MSG_RESULT([yes]) 107*716fd348SMartin Matuska ],[ 108*716fd348SMartin Matuska AC_MSG_RESULT([no]) 109*716fd348SMartin Matuska AC_MSG_ERROR([ 110*716fd348SMartin Matuska *** This kernel does not include the required loadable module 111*716fd348SMartin Matuska *** support! 112*716fd348SMartin Matuska *** 113*716fd348SMartin Matuska *** To build OpenZFS as a loadable Linux kernel module 114*716fd348SMartin Matuska *** enable loadable module support by setting 115*716fd348SMartin Matuska *** `CONFIG_MODULES=y` in the kernel configuration and run 116*716fd348SMartin Matuska *** `make modules_prepare` in the Linux source tree. 117*716fd348SMartin Matuska *** 118*716fd348SMartin Matuska *** If you don't intend to enable loadable kernel module 119*716fd348SMartin Matuska *** support, please compile OpenZFS as a Linux kernel built-in. 120*716fd348SMartin Matuska *** 121*716fd348SMartin Matuska *** Prepare the Linux source tree by running `make prepare`, 122*716fd348SMartin Matuska *** use the OpenZFS `--enable-linux-builtin` configure option, 123*716fd348SMartin Matuska *** copy the OpenZFS sources into the Linux source tree using 124*716fd348SMartin Matuska *** `./copy-builtin <linux source directory>`, 125*716fd348SMartin Matuska *** set `CONFIG_ZFS=y` in the kernel configuration and compile 126*716fd348SMartin Matuska *** kernel as usual. 127*716fd348SMartin Matuska ]) 128*716fd348SMartin Matuska ]) 129*716fd348SMartin Matuska ], [ 130*716fd348SMartin Matuska ZFS_LINUX_TRY_COMPILE([], [], [ 131*716fd348SMartin Matuska AC_MSG_RESULT([not needed]) 132*716fd348SMartin Matuska ],[ 133*716fd348SMartin Matuska AC_MSG_RESULT([error]) 134*716fd348SMartin Matuska AC_MSG_ERROR([ 135*716fd348SMartin Matuska *** This kernel is unable to compile object files. 136*716fd348SMartin Matuska *** 137*716fd348SMartin Matuska *** Please make sure you prepared the Linux source tree 138*716fd348SMartin Matuska *** by running `make prepare` there. 139*716fd348SMartin Matuska ]) 140*716fd348SMartin Matuska ]) 141*716fd348SMartin Matuska ]) 142*716fd348SMartin Matuska]) 143*716fd348SMartin Matuska 144*716fd348SMartin Matuskadnl # 145eda14cbcSMatt Macydnl # Check CONFIG_TRIM_UNUSED_KSYMS 146eda14cbcSMatt Macydnl # 147eda14cbcSMatt Macydnl # Verify the kernel has CONFIG_TRIM_UNUSED_KSYMS disabled. 148eda14cbcSMatt Macydnl # 149eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_TRIM_UNUSED_KSYMS], [ 150eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([config_trim_unusued_ksyms], [ 151eda14cbcSMatt Macy #if defined(CONFIG_TRIM_UNUSED_KSYMS) 152eda14cbcSMatt Macy #error CONFIG_TRIM_UNUSED_KSYMS not defined 153eda14cbcSMatt Macy #endif 154eda14cbcSMatt Macy ],[]) 155eda14cbcSMatt Macy]) 156eda14cbcSMatt Macy 157eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_CONFIG_TRIM_UNUSED_KSYMS], [ 158eda14cbcSMatt Macy AC_MSG_CHECKING([whether CONFIG_TRIM_UNUSED_KSYM is disabled]) 159eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([config_trim_unusued_ksyms], [ 160eda14cbcSMatt Macy AC_MSG_RESULT([yes]) 161eda14cbcSMatt Macy ],[ 162eda14cbcSMatt Macy AC_MSG_RESULT([no]) 163eda14cbcSMatt Macy AS_IF([test "x$enable_linux_builtin" != xyes], [ 164eda14cbcSMatt Macy AC_MSG_ERROR([ 165eda14cbcSMatt Macy *** This kernel has unused symbols trimming enabled, please disable. 166eda14cbcSMatt Macy *** Rebuild the kernel with CONFIG_TRIM_UNUSED_KSYMS=n set.]) 167eda14cbcSMatt Macy ]) 168eda14cbcSMatt Macy ]) 169eda14cbcSMatt Macy]) 170eda14cbcSMatt Macy 171eda14cbcSMatt Macydnl # 172eda14cbcSMatt Macydnl # Check CONFIG_ZLIB_INFLATE 173eda14cbcSMatt Macydnl # 174eda14cbcSMatt Macydnl # Verify the kernel has CONFIG_ZLIB_INFLATE support enabled. 175eda14cbcSMatt Macydnl # 176eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_INFLATE], [ 177eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([config_zlib_inflate], [ 178eda14cbcSMatt Macy #if !defined(CONFIG_ZLIB_INFLATE) && \ 179eda14cbcSMatt Macy !defined(CONFIG_ZLIB_INFLATE_MODULE) 180eda14cbcSMatt Macy #error CONFIG_ZLIB_INFLATE not defined 181eda14cbcSMatt Macy #endif 182eda14cbcSMatt Macy ],[]) 183eda14cbcSMatt Macy]) 184eda14cbcSMatt Macy 185eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_CONFIG_ZLIB_INFLATE], [ 186eda14cbcSMatt Macy AC_MSG_CHECKING([whether CONFIG_ZLIB_INFLATE is defined]) 187eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([config_zlib_inflate], [ 188eda14cbcSMatt Macy AC_MSG_RESULT([yes]) 189eda14cbcSMatt Macy ],[ 190eda14cbcSMatt Macy AC_MSG_RESULT([no]) 191eda14cbcSMatt Macy AC_MSG_ERROR([ 192eda14cbcSMatt Macy *** This kernel does not include the required zlib inflate support. 193eda14cbcSMatt Macy *** Rebuild the kernel with CONFIG_ZLIB_INFLATE=y|m set.]) 194eda14cbcSMatt Macy ]) 195eda14cbcSMatt Macy]) 196eda14cbcSMatt Macy 197eda14cbcSMatt Macydnl # 198eda14cbcSMatt Macydnl # Check CONFIG_ZLIB_DEFLATE 199eda14cbcSMatt Macydnl # 200eda14cbcSMatt Macydnl # Verify the kernel has CONFIG_ZLIB_DEFLATE support enabled. 201eda14cbcSMatt Macydnl # 202eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_CONFIG_ZLIB_DEFLATE], [ 203eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([config_zlib_deflate], [ 204eda14cbcSMatt Macy #if !defined(CONFIG_ZLIB_DEFLATE) && \ 205eda14cbcSMatt Macy !defined(CONFIG_ZLIB_DEFLATE_MODULE) 206eda14cbcSMatt Macy #error CONFIG_ZLIB_DEFLATE not defined 207eda14cbcSMatt Macy #endif 208eda14cbcSMatt Macy ],[]) 209eda14cbcSMatt Macy]) 210eda14cbcSMatt Macy 211eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_CONFIG_ZLIB_DEFLATE], [ 212eda14cbcSMatt Macy AC_MSG_CHECKING([whether CONFIG_ZLIB_DEFLATE is defined]) 213eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([config_zlib_deflate], [ 214eda14cbcSMatt Macy AC_MSG_RESULT([yes]) 215eda14cbcSMatt Macy ],[ 216eda14cbcSMatt Macy AC_MSG_RESULT([no]) 217eda14cbcSMatt Macy AC_MSG_ERROR([ 218eda14cbcSMatt Macy *** This kernel does not include the required zlib deflate support. 219eda14cbcSMatt Macy *** Rebuild the kernel with CONFIG_ZLIB_DEFLATE=y|m set.]) 220eda14cbcSMatt Macy ]) 221eda14cbcSMatt Macy]) 222