]) # LIBCFS_I_UID_READ
#
-# LIBCFS_SOCK_ALLOC_FILE
-#
-# FC18 3.7.2-201 unexport sock_map_fd() change to
-# use sock_alloc_file().
-# upstream commit 56b31d1c9f1e6a3ad92e7bfe252721e05d92b285
-#
-AC_DEFUN([LIBCFS_SOCK_ALLOC_FILE], [
-LB_CHECK_EXPORT([sock_alloc_file], [net/socket.c], [
- LB_CHECK_COMPILE([if 'sock_alloc_file' takes 3 arguments],
- sock_alloc_file_3args, [
- #include <linux/net.h>
- ],[
- sock_alloc_file(NULL, 0, NULL);
- ],[
- AC_DEFINE(HAVE_SOCK_ALLOC_FILE_3ARGS, 1,
- [sock_alloc_file takes 3 arguments])
- ],[
- AC_DEFINE(HAVE_SOCK_ALLOC_FILE, 1,
- [sock_alloc_file is exported])
- ])
-])
-]) # LIBCFS_SOCK_ALLOC_FILE
-
-#
# LIBCFS_HAVE_CRC32
#
AC_DEFUN([LIBCFS_HAVE_CRC32], [
#
# Linux kernel 3.12 introduced struct kernel_param_ops
# This has been backported to all lustre supported
-# clients expect RHEL6. We have to handle the differences.
+# clients except RHEL6. We have to handle the differences.
#
AC_DEFUN([LIBCFS_KERNEL_PARAM_OPS],[
LB_CHECK_COMPILE([does 'struct kernel_param_ops' exist],
#include <linux/module.h>
],[
struct kernel_param_ops ops;
+
+ ops.set = NULL;
],[
AC_DEFINE(HAVE_KERNEL_PARAM_OPS, 1,
['struct kernel_param_ops' is available])
#include <linux/mmzone.h>
#include <linux/shrinker.h>
],[
- ((struct shrinker*)0)->count_objects(NULL, NULL);
+ struct shrinker shrinker;
+
+ shrinker.count_objects = NULL;
],[
AC_DEFINE(HAVE_SHRINKER_COUNT, 1,
[shrinker has count_objects member])
#include <linux/hrtimer.h>
#include <linux/ktime.h>
],[
+ ktime_t now = ktime_set(0, 0);
struct timespec64 ts;
- ktime_t now;
ts = ktime_to_timespec64(now);
],[
timespec64_sub, [
#include <linux/time.h>
],[
- struct timespec64 later,earlier,diff;
+ struct timespec64 later = { }, earlier = { }, diff;
diff = timespec64_sub(later, earlier);
],[
]) # LIBCFS_FPU_API
#
+# Kernel version 4.4 commit ef951599074ba4fad2d0efa0a977129b41e6d203
+# introduced kstrtobool and kstrtobool_from_user.
+#
+AC_DEFUN([LIBCFS_KSTRTOBOOL_FROM_USER], [
+LB_CHECK_COMPILE([if Linux kernel has 'kstrtobool_from_user'],
+kstrtobool_from_user, [
+ #include <linux/kernel.h>
+],[
+ bool result;
+ return kstrtobool_from_user(NULL, 0, &result);
+],[
+ AC_DEFINE(HAVE_KSTRTOBOOL_FROM_USER, 1,
+ [kernel has kstrtobool_from_user])
+])
+]) # LIBCFS_KSTRTOBOOL_FROM_USER
+
+#
# Kernel version 4.5-rc1 commit d12481bc58fba89427565f8592e88446ec084a24
# added crypto hash helpers
#
]) # LIBCFS_SCHED_HEADERS
#
+# LIBCFS_WAIT_QUEUE_ENTRY
+#
+# Kernel version 4.13 ac6424b981bce1c4bc55675c6ce11bfe1bbfa64f
+# Rename wait_queue_t => wait_queue_entry_t
+#
+AC_DEFUN([LIBCFS_WAIT_QUEUE_ENTRY], [
+LB_CHECK_COMPILE([if 'wait_queue_entry_t' exists],
+wait_queue_entry, [
+ #include <linux/wait.h>
+],[
+ wait_queue_entry_t e;
+
+ e.flags = 0;
+],[
+ AC_DEFINE(HAVE_WAIT_QUEUE_ENTRY, 1,
+ ['wait_queue_entry_t' is available])
+])
+]) # LIBCFS_WAIT_QUEUE_ENTRY
+
+#
+# LIBCFS_NEW_KERNEL_WRITE
+#
+# Kernel version 4.14 e13ec939e96b13e664bb6cee361cc976a0ee621a
+# changed kernel_write prototype to make is plug compatible
+# with the unexported vfs_write()
+#
+AC_DEFUN([LIBCFS_NEW_KERNEL_WRITE], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if 'kernel_write' matches other read/write helpers],
+kernel_write_match, [
+ #include <linux/fs.h>
+],[
+ const void *buf = NULL;
+ loff_t pos = 0;
+ return kernel_write(NULL, buf, 0, &pos);
+],[
+ AC_DEFINE(HAVE_NEW_KERNEL_WRITE, 1,
+ ['kernel_write' aligns with read/write helpers])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_NEW_KERNEL_WRITE
+
+#
+# LIBCFS_TIMER_SETUP
+#
+# Kernel version 4.15 commit e99e88a9d2b067465adaa9c111ada99a041bef9a
+# setup_timer() was replaced by timer_setup(), where the callback
+# argument is the structure already holding the struct timer_list.
+#
+AC_DEFUN([LIBCFS_TIMER_SETUP], [
+LB_CHECK_COMPILE([if setup_timer has been replaced with timer_setup],
+timer_setup, [
+ #include <linux/timer.h>
+],[
+ timer_setup(NULL, NULL, 0);
+],[
+ AC_DEFINE(HAVE_TIMER_SETUP, 1,
+ [timer_setup has replaced setup_timer])
+])
+]) # LIBCFS_TIMER_SETUP
+
+#
# LIBCFS_PROG_LINUX
#
# LibCFS linux kernel checks
# 3.5
LIBCFS_PROCESS_NAMESPACE
LIBCFS_I_UID_READ
-# 3.7
-LIBCFS_SOCK_ALLOC_FILE
# 3.8
LIBCFS_HAVE_CRC32
LIBCFS_ENABLE_CRC32_ACCEL
# 4.2
LIBCFS_HAVE_TOPOLOGY_SIBLING_CPUMASK
LIBCFS_FPU_API
+# 4.4
+LIBCFS_KSTRTOBOOL_FROM_USER
# 4.5
LIBCFS_CRYPTO_HASH_HELPERS
LIBCFS_EXPORT_KSET_FIND_OBJ
LIBCFS_HOTPLUG_STATE_MACHINE
# 4.11
LIBCFS_SCHED_HEADERS
+# 4.13
+LIBCFS_WAIT_QUEUE_ENTRY
+# 4.14
+LIBCFS_NEW_KERNEL_WRITE
+# 4.15
+LIBCFS_TIMER_SETUP
]) # LIBCFS_PROG_LINUX
#
AC_MSG_NOTICE([LibCFS core checks
==============================================================================])
-# lnet/utils/portals.c
-AC_CHECK_HEADERS([asm/types.h endian.h sys/ioctl.h])
-
-# lnet/utils/debug.c
-AC_CHECK_HEADERS([linux/version.h])
-
-AC_CHECK_TYPE([spinlock_t],
- [AC_DEFINE(HAVE_SPINLOCK_T, 1, [spinlock_t is defined])],
- [],
- [#include <linux/spinlock.h>])
-
-# lnet/utils/wirecheck.c
-AC_CHECK_FUNCS([strnlen])
-
-# lnet/libcfs/user-prim.c, missing for RHEL5 and earlier userspace
-AC_CHECK_FUNCS([strlcpy])
-
-# libcfs/libcfs/user-prim.c, missing for RHEL5 and earlier userspace
-AC_CHECK_FUNCS([strlcat])
-
-# libcfs/include/libcfs/linux/linux-prim.h, ...
-AC_CHECK_HEADERS([linux/types.h sys/types.h linux/unistd.h unistd.h])
-
-# libcfs/include/libcfs/linux/linux-prim.h
-AC_CHECK_HEADERS([linux/random.h], [], [],
- [#ifdef HAVE_LINUX_TYPES_H
- #include <linux/types.h>
- #endif
- ])
-
-# libcfs/include/libcfs/linux/libcfs.h
-# libcfs/include/libcfs/byteorder.h
# libcfs/libcfs/util/nidstrings.c
AC_CHECK_HEADERS([netdb.h asm/types.h endian.h])
AC_CHECK_FUNCS([gethostbyname])