]) # LIBCFS_SHRINKER_COUNT
#
+# Kernel version 3.13 commit aace05097a0fd467230e39acb148be0fdaa90068
+# add match_wildcard() function.
+#
+AC_DEFUN([LIBCFS_MATCH_WILDCARD],[
+LB_CHECK_COMPILE([does function 'match_wildcard' exist],
+match_wildcard, [
+ #include <linux/parser.h>
+],[
+ bool match;
+
+ match = match_wildcard(NULL, NULL);
+],[
+ AC_DEFINE(HAVE_MATCH_WILDCARD, 1,
+ [match_wildcard() is available])
+])
+]) # LIBCFS_MATCH_WILDCARD
+
+#
# LIBCFS_HAVE_MAPPING_AS_EXITING_FLAG
#
# v3.14-7405-g91b0abe36a7b added AS_EXITING flag with
#
# kernel 3.15-rc4 commit 71d8e532b1549a478e6a6a8a44f309d050294d00
# start adding the tag to iov_iter
+# kernel 5.13 commit 8cd54c1c848031a87820e58d772166ffdf8c08c0 change
+# ->type to ->iter_type
#
AC_DEFUN([LIBCFS_IOV_ITER_HAS_TYPE], [
tmp_flags="$EXTRA_KCFLAGS"
EXTRA_KCFLAGS="-Werror"
+iter_type_member=no
LB_CHECK_COMPILE([if iov_iter has member type],
iov_iter_has_type_member, [
#include <linux/uio.h>
],[
AC_DEFINE(HAVE_IOV_ITER_HAS_TYPE_MEMBER, 1,
[if iov_iter has member type])
+ iter_type_member=yes
])
+if test $iter_type_member = no; then
+ LB_CHECK_COMPILE([if iov_iter has member iter_type],
+ iov_iter_has_iter_type_member, [
+ #include <linux/uio.h>
+ ],[
+ struct iov_iter iter = { .iter_type = ITER_KVEC };
+ (void)iter;
+ ],[
+ AC_DEFINE(HAVE_IOV_ITER_HAS_TYPE_MEMBER, 1,
+ [if iov_iter has member iter_type])
+ iter_type_member=yes
+ ])
+fi
EXTRA_KCFLAGS="$tmp_flags"
]) # LIBCFS_IOV_ITER_HAS_TYPE
#
# LIBCFS_HAVE_NS_TO_TIMESPEC64
#
-# Kernel version 4.16-rc3 commit a84d1169164b274f13b97a23ff235c000efe3b49
+# Kernel version 3.16-rc3 commit a84d1169164b274f13b97a23ff235c000efe3b49
# introduced struct __kernel_old_timeval
#
AC_DEFUN([LIBCFS_HAVE_NS_TO_TIMESPEC64],[
]) # LIBCFS_HAVE_NS_TO_TIMESPEC64
#
+# LIBCFS_HAVE_GLOB
+#
+# Kernel version 3.16 commit b01250856b25f4417c51aa33afc451fbf7da1484
+# added glob support to the Linux kernel
+#
+AC_DEFUN([LIBCFS_HAVE_GLOB],[
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([does 'glob_match()' exist],
+glob, [
+ #include <linux/glob.h>
+],[
+ return glob_match(NULL, NULL);
+],[
+ AC_DEFINE(HAVE_GLOB, 1,
+ [glob_match() is available])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_HAVE_GLOB
+
+#
# Kernel version 3.17 changed hlist_add_after to
# hlist_add_behind
#
]) # LIBCFS_WAIT_QUEUE_TASK_LIST_RENAME
#
+# LIBCFS_WAIT_BIT_QUEUE_ENTRY_EXISTS
+#
+# Kernel version v4.12-rc6-23-g76c85ddc4695
+# sched/wait: Standardize wait_bit_queue naming
+#
+# renamed struct wait_bit_queue => wait_bit_queue_entry
+#
+AC_DEFUN([LIBCFS_WAIT_BIT_QUEUE_ENTRY_EXISTS], [
+LB_CHECK_COMPILE([if struct wait_bit_queue_entry exists],
+struct_wait_bit_queue_entry_exists, [
+ #include <linux/wait.h>
+ #if HAVE_WAIT_BIT_HEADER_H
+ #include <linux/wait_bit.h>
+ #endif
+],[
+ struct wait_bit_queue_entry entry;
+ memset(&entry, 0, sizeof(entry));
+],[
+ AC_DEFINE(HAVE_WAIT_BIT_QUEUE_ENTRY, 1,
+ [if struct wait_bit_queue_entry exists])
+])
+]) # LIBCFS_WAIT_BIT_QUEUE_ENTRY_EXISTS
+
+#
# LIBCFS_NLA_STRDUP
#
# Kernel version 4.13-rc1 commit 2cf0c8b3e6942ecafe6ebb1a6d0328a81641bf39
macro_iov_iter_type_exists, [
#include <linux/uio.h>
],[
- struct iov_iter iter = { .type = ITER_KVEC };
+ struct iov_iter iter = { };
enum iter_type type = iov_iter_type(&iter);
(void)type;
],[
]) # LIBCFS_CACHE_DETAIL_WRITERS
#
+# LIBCFS_GENL_DUMPIT_INFO
+#
+# kernel v5.4-rc1 commit bf813b0afeae2f012f0e527a526c1b78ca21ad82
+# expanded struct genl_dumpit_info to include struct genl_family.
+#
+AC_DEFUN([LIBCFS_GENL_DUMPIT_INFO], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if struct genl_dumpit_info has family field],
+genl_dumpit_info, [
+ #include <net/genetlink.h>
+],[
+ static struct genl_dumpit_info info;
+
+ info.family = NULL;
+],[
+ AC_DEFINE(HAVE_GENL_DUMPIT_INFO, 1,
+ [struct genl_dumpit_info has family field])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_GENL_DUMPIT_INFO
+
+#
# LIBCFS_KALLSYMS_LOOKUP
#
# kernel v5.6-11591-g0bd476e6c671
[crypto/sha2.h is present])])
]) # LIBCFS_HAVE_CRYPTO_SHA2_HEADER
+#
+# LIBCFS_HAVE_LIST_CMP_FUNC_T
+#
+# kernel 5.10.70 commit 4f0f586bf0c898233d8f316f471a21db2abd522d
+# treewide: Change list_sort to use const pointers
+AC_DEFUN([LIBCFS_HAVE_LIST_CMP_FUNC_T], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror -Wno-unused-variable"
+LB_CHECK_COMPILE([if list_cmp_func_t type is defined],
+list_cmp_func_t, [
+ #include <linux/list_sort.h>
+],[
+ list_cmp_func_t cmp;
+],[
+ AC_DEFINE(HAVE_LIST_CMP_FUNC_T, 1,
+ [list_cmp_func_t type is defined])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_HAVE_LIST_CMP_FUNC_T
+
+#
+# LIBCFS_NLA_STRSCPY
+#
+# Kernel version 5.10-rc3 commit 872f690341948b502c93318f806d821c56772c42
+# replaced nla_strlcpy() with nla_strscpy().
+#
+AC_DEFUN([LIBCFS_SRC_NLA_STRSCPY], [
+ LB2_LINUX_TEST_SRC([nla_strscpy], [
+ #include <net/netlink.h>
+ ],[
+ if (nla_strscpy(NULL, NULL, 0) < 0)
+ return -EINVAL;
+ ],[
+ ],[])
+])
+AC_DEFUN([LIBCFS_NLA_STRSCPY], [
+ AC_MSG_CHECKING([if 'nla_strscpy()' exists])
+ LB2_LINUX_TEST_RESULT([nla_strscpy], [
+ AC_DEFINE(HAVE_NLA_STRSCPY, 1,
+ ['nla_strscpy' is available])
+ AC_MSG_RESULT(yes)
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+]) # LIBCFS_NLA_STRSCPY
+
+#
+# LIBCFS_HAVE_CIPHER_HEADER
+#
+# Kernel 5.12 commit 0eb76ba29d16df2951d37c54ca279c4e5630b071
+# crypto: remove cipher routines from public crypto API
+#
+AC_DEFUN([LIBCFS_HAVE_CIPHER_HEADER], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_LINUX_HEADER([crypto/internal/cipher.h], [
+ AC_DEFINE(HAVE_CIPHER_H, 1,
+ [crypto/internal/cipher.h is present])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_HAVE_CIPHER_HEADER
+
+#
+# LIBCFS_HAVE_TASK_RUNNING
+#
+# Kernel 5.13-rc6 commit b03fbd4ff24c5f075e58eb19261d5f8b3e40d
+# introduced task_is_running() macro.
+#
+AC_DEFUN([LIBCFS_HAVE_TASK_IS_RUNNING], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if task_is_running() is defined],
+task_is_running, [
+ #include <linux/sched.h>
+],[
+ if (task_is_running(current))
+ schedule();
+],[
+ AC_DEFINE(HAVE_TASK_IS_RUNNING, 1,
+ [task_is_running() is defined])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_HAVE_TASK_IS_RUNNING
+
+#
+# LIBCFS_LINUX_STDARG_HEADER
+#
+# Kernel 5.14-rc5 commit c0891ac15f0428ffa81b2e818d416bdf3cb74ab6
+# isystem: ship and use stdarg.h
+#
+AC_DEFUN([LIBCFS_LINUX_STDARG_HEADER], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_LINUX_HEADER([linux/stdarg.h], [
+ AC_DEFINE(HAVE_LINUX_STDARG_HEADER, 1, [linux/stdarg.h is present])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_LINUX_STDARG_HEADER
+
+#
+# LIBCFS_HAVE_PANIC_NOTIFIER_HEADER
+#
+# Kernel 5.14 commit f39650de687e35766572ac89dbcd16a5911e2f0a
+# kernel.h: split out panic and oops helpers
+#
+AC_DEFUN([LIBCFS_HAVE_PANIC_NOTIFIER_HEADER], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_LINUX_HEADER([linux/panic_notifier.h], [
+ AC_DEFINE(HAVE_PANIC_NOTIFIER_H, 1,
+ [linux/panic_notifier.h is present])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_HAVE_PANIC_NOTIFIER_HEADER
+
+#
+# LIBCFS_PARAM_SET_UINT_MINMAX
+#
+# Kernel 5.15-rc1 commit 2a14c9ae15a38148484a128b84bff7e9ffd90d68
+# moved param_set_uint_minmax to common code
+#
+AC_DEFUN([LIBCFS_PARAM_SET_UINT_MINMAX],[
+LB_CHECK_COMPILE([does function 'param_set_uint_minmax' exist],
+param_set_uint_minmax, [
+ #include <linux/moduleparam.h>
+],[
+ param_set_uint_minmax(NULL, NULL, 0, 0);
+],[
+ AC_DEFINE(HAVE_PARAM_SET_UINT_MINMAX, 1,
+ ['param_set_uint_minmax' is available])
+])
+]) # LIBCFS_PARAM_SET_UINT_MINMAX
+
AC_DEFUN([LIBCFS_PROG_LINUX_SRC], [
+ # 5.6
LIBCFS_SRC_HAVE_PROC_OPS
+ # 5.10
+ LIBCFS_SRC_NLA_STRSCPY
AC_MSG_CHECKING([for available kernel interfaces to libcfs])
LB2_LINUX_TEST_COMPILE_ALL([libcfs])
AC_DEFUN([LIBCFS_PROG_LINUX_RESULTS], [
# 5.6
LIBCFS_HAVE_PROC_OPS
+ # 5.10
+ LIBCFS_NLA_STRSCPY
+])
+
+#
+# LIBCFS_LINUX_BLK_INTEGRITY_HEADER
+#
+# Kernel 5.15-rc6 commit fe45e630a1035aea94c29016f2598bbde149bbe3
+# block: move integrity handling out of <linux/blkdev.h>
+#
+AC_DEFUN([LIBCFS_LINUX_BLK_INTEGRITY_HEADER], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_LINUX_HEADER([linux/blk-integrity.h], [
+ AC_DEFINE(HAVE_LINUX_BLK_INTEGRITY_HEADER, 1,
+ [linux/blk-integrity.h is present])
])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_LINUX_BLK_INTEGRITY_HEADER
#
# LIBCFS_PROG_LINUX
LIBCFS_KTIME_BEFORE
LIBCFS_KTIME_COMPARE
LIBCFS_SHRINKER_COUNT
+# 3.13
+LIBCFS_MATCH_WILDCARD
# 3.15
LIBCFS_HAVE_MAPPING_AS_EXITING_FLAG
LIBCFS_IOV_ITER_HAS_TYPE
# 3.16
+LIBCFS_HAVE_GLOB
LIBCFS_HAVE_NS_TO_TIMESPEC64
# 3.17
LIBCFS_HLIST_ADD_AFTER
# 4.13
LIBCFS_NLA_STRDUP
LIBCFS_WAIT_QUEUE_ENTRY
+LIBCFS_WAIT_BIT_QUEUE_ENTRY_EXISTS
# 4.14
LIBCFS_DEFINE_TIMER
LIBCFS_NEW_KERNEL_WRITE
LIBCFS_LOOKUP_USER_KEY
LIBCFS_FORCE_SIG_WITH_TASK
LIBCFS_CACHE_DETAIL_WRITERS
-LIBCFS_HAVE_NR_UNSTABLE_NFS
+# 5.4
+LIBCFS_GENL_DUMPIT_INFO
# 5.7
LIBCFS_KALLSYMS_LOOKUP
LIBCFS_TCP_SOCK_SET_QUICKACK
LIBCFS_HAVE_MMAP_LOCK
LIBCFS_KERNEL_SETSOCKOPT
LIBCFS_VMALLOC_2ARGS
+LIBCFS_HAVE_NR_UNSTABLE_NFS
LIBCFS_SEC_RELEASE_SECCTX
# 5.10
LIBCFS_HAVE_KFREE_SENSITIVE
LIBCFS_HAVE_CRYPTO_SHA2_HEADER
+LIBCFS_HAVE_LIST_CMP_FUNC_T
+# 5.12
+LIBCFS_HAVE_CIPHER_HEADER
+# 5.13
+LIBCFS_HAVE_TASK_IS_RUNNING
+# 5.14
+LIBCFS_LINUX_STDARG_HEADER
+LIBCFS_HAVE_PANIC_NOTIFIER_HEADER
+# 5.15
+LIBCFS_PARAM_SET_UINT_MINMAX
+LIBCFS_LINUX_BLK_INTEGRITY_HEADER
]) # LIBCFS_PROG_LINUX
#