]) # LIBCFS_ENABLE_CRC32C_ACCEL
#
+# Kernel version 3.11 introduced ktime_get_ts64
+#
+AC_DEFUN([LIBCFS_KTIME_GET_TS64],[
+LB_CHECK_COMPILE([does function 'ktime_get_ts64' exist],
+ktime_get_ts64, [
+ #include <linux/ktime.h>
+],[
+ struct timespec64 *ts = NULL;
+
+ ktime_get_ts64(ts);
+],[
+ AC_DEFINE(HAVE_KTIME_GET_TS64, 1,
+ ['ktime_get_ts64' is available])
+])
+]) # LIBCFS_KTIME_GET_TS64
+
+#
+
+#
# FC19 3.12 kernel struct shrinker change
#
AC_DEFUN([LIBCFS_SHRINKER_COUNT],[
]) # LIBCFS_HLIST_ADD_AFTER
#
+# Kernel version 3.17 introduced struct timespec64
+#
+AC_DEFUN([LIBCFS_TIMESPEC64],[
+LB_CHECK_COMPILE([does 'struct timespec64' exist],
+timespec64, [
+ #include <linux/time.h>
+],[
+ struct timespec64 ts;
+
+ ts.tv_sec = 0;
+ ts.tv_nsec = 0;
+],[
+ AC_DEFINE(HAVE_TIMESPEC64, 1,
+ ['struct timespec64' is available])
+])
+]) # LIBCFS_TIMESPEC64
+
+#
+# Kernel version 3.17 introduced ktime_get_real_ts64
+#
+AC_DEFUN([LIBCFS_KTIME_GET_REAL_TS64],[
+LB_CHECK_COMPILE([does function 'ktime_get_real_ts64' exist],
+ktime_get_real_ts64, [
+ #include <linux/ktime.h>
+],[
+ struct timespec64 *ts = NULL;
+
+ ktime_get_real_ts64(ts);
+],[
+ AC_DEFINE(HAVE_KTIME_GET_REAL_TS64, 1,
+ ['ktime_get_real_ts64' is available])
+])
+]) # LIBCFS_KTIME_GET_REAL_TS64
+
+#
+# Kernel version 3.17 introduced ktime_get_real_seconds
+#
+AC_DEFUN([LIBCFS_KTIME_GET_REAL_SECONDS],[
+LB_CHECK_COMPILE([does function 'ktime_get_real_seconds' exist],
+ktime_get_real_seconds, [
+ #include <linux/ktime.h>
+],[
+ time64_t now;
+
+ now = ktime_get_real_seconds();
+],[
+ AC_DEFINE(HAVE_KTIME_GET_REAL_SECONDS, 1,
+ ['ktime_get_real_seconds' is available])
+])
+]) # LIBCFS_KTIME_GET_REAL_SECONDS
+
+#
+# Kernel version 3.17 created ktime_get_real_ns wrapper
+#
+AC_DEFUN([LIBCFS_KTIME_GET_REAL_NS],[
+LB_CHECK_COMPILE([does function 'ktime_get_real_ns' exist],
+ktime_get_real_ns, [
+ #include <linux/ktime.h>
+],[
+ u64 nanoseconds;
+
+ nanoseconds = ktime_get_real_ns();
+],[],[
+ AC_DEFINE(NEED_KTIME_GET_REAL_NS, 1,
+ ['ktime_get_real_ns' is not available])
+])
+]) # LIBCFS_KTIME_GET_REAL_NS
+
+#
+# Kernel version 3.19 introduced ktime_get_seconds
+#
+AC_DEFUN([LIBCFS_KTIME_GET_SECONDS],[
+LB_CHECK_COMPILE([does function 'ktime_get_seconds' exist],
+ktime_get_seconds, [
+ #include <linux/ktime.h>
+],[
+ time64_t now;
+
+ now = ktime_get_seconds();
+],[
+ AC_DEFINE(HAVE_KTIME_GET_SECONDS, 1,
+ ['ktime_get_seconds' is available])
+])
+]) # LIBCFS_KTIME_GET_SECONDS
+
+#
# Kernel version 4.2 changed topology_thread_cpumask
# to topology_sibling_cpumask
#
]) # LIBCFS_STACKTRACE_OPS_ADDRESS_RETURN_INT
#
+# Kernel version 4.6 removed both struct task_struct and struct mm_struct
+# arguments to get_user_pages
+#
+AC_DEFUN([LIBCFS_GET_USER_PAGES_6ARG], [
+LB_CHECK_COMPILE([if 'get_user_pages()' takes 6 arguments],
+get_user_pages_6arg, [
+ #include <linux/mm.h>
+],[
+ int rc;
+
+ rc = get_user_pages(0, 0, 0, 0, NULL, NULL);
+],[
+ AC_DEFINE(HAVE_GET_USER_PAGES_6ARG, 1,
+ [get_user_pages takes 6 arguments])
+])
+]) # LIBCFS_GET_USER_PAGES_6ARG
+
+#
# LIBCFS_PROG_LINUX
#
# LibCFS linux kernel checks
LIBCFS_ENABLE_CRC32_ACCEL
# 3.10
LIBCFS_ENABLE_CRC32C_ACCEL
+# 3.11
+LIBCFS_KTIME_GET_TS64
# 3.12
LIBCFS_SHRINKER_COUNT
# 3.17
LIBCFS_HLIST_ADD_AFTER
+LIBCFS_TIMESPEC64
+LIBCFS_KTIME_GET_REAL_TS64
+LIBCFS_KTIME_GET_REAL_SECONDS
+LIBCFS_KTIME_GET_REAL_NS
+# 3.19
+LIBCFS_KTIME_GET_SECONDS
# 4.2
LIBCFS_HAVE_TOPOLOGY_SIBLING_CPUMASK
LIBCFS_FPU_API
LIBCFS_CRYPTO_HASH_HELPERS
# 4.6
LIBCFS_STACKTRACE_OPS_ADDRESS_RETURN_INT
+LIBCFS_GET_USER_PAGES_6ARG
]) # LIBCFS_PROG_LINUX
#