EXTRA_KCFLAGS="$tmp_flags"
])
-# check cpumask_size (2.6.28)
-AC_DEFUN([LIBCFS_CPUMASK_SIZE],
-[AC_MSG_CHECKING([whether have cpumask_size()])
-LB_LINUX_TRY_COMPILE([
- #include <linux/cpumask.h>
-],[
- int size = cpumask_size();
-],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_CPUMASK_SIZE, 1, [have cpumask_size()])
-],[
- AC_MSG_RESULT(NO)
-])
-])
-
-# check cpu topology functions
-#
-# topology_core_cpumask (2.6.29, not on all archs)
-# topology_core_siblings (not on all archs)
-# topology_thread_cpumask (2.6.29, not on all archs)
-# topology_thread_siblings (not on all archs)
-# cpumask_of_node/node_to_cpumask (not always exported)
-AC_DEFUN([LIBCFS_CPU_TOPOLOGY],
-[AC_MSG_CHECKING([whether have topology.h])
-LB_LINUX_TRY_COMPILE([
- #include <linux/topology.h>
-],[],[
- AC_DEFINE(HAVE_CPU_TOPOLOGY, 1, [have CPU topology])
- AC_MSG_RESULT(yes)
-
- AC_MSG_CHECKING([whether have topology_core_cpumask])
- LB_LINUX_TRY_COMPILE([
- #include <linux/topology.h>
- ],[
- cpumask_t *mask = topology_core_cpumask(0);
- ],[
- AC_DEFINE(HAVE_TOPOLOGY_CORE_CPUMASK, 1,
- [have topology_core_cpumask])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- ])
-
- AC_MSG_CHECKING([whether have topology_core_siblings])
- LB_LINUX_TRY_COMPILE([
- #include <linux/topology.h>
- ],[
- cpumask_t mask = topology_core_siblings(0);
- ],[
- AC_DEFINE(HAVE_TOPOLOGY_CORE_SIBLINGS, 1,
- [have topology_core_siblings])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- ])
-
- AC_MSG_CHECKING([whether have topology_thread_cpumask])
- LB_LINUX_TRY_COMPILE([
- #include <linux/topology.h>
- ],[
- cpumask_t *mask = topology_thread_cpumask(0);
- ],[
- AC_DEFINE(HAVE_TOPOLOGY_THREAD_CPUMASK, 1,
- [have topology_thread_cpumask])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- ])
-
- AC_MSG_CHECKING([whether have topology_thread_siblings])
- LB_LINUX_TRY_COMPILE([
- #include <linux/topology.h>
- ],[
- cpumask_t mask = topology_thread_siblings(0);
- ],[
- AC_DEFINE(HAVE_TOPOLOGY_THREAD_SIBLINGS, 1,
- [have topology_thread_siblings])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- ])
-
- AC_MSG_CHECKING([whether OFED backports have cpumask_of_node])
- # Some OFED has cpumask_of_node backports defined in
- # its private include/linux/cpumask.h. However, it is
- # defined conflictingly with kernel's cpumask_of_node.
- if test -f $OFED_BACKPORT_PATH/linux/cpumask.h; then
- grep -q cpumask_of_node $OFED_BACKPORT_PATH/linux/cpumask.h 2>/dev/null
- rc=$?
- if test $rc -eq 0; then
- AC_DEFINE(HAVE_OFED_CPUMASK_OF_NODE, 1, [have cpumask_of_node])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
- fi
-
- AC_MSG_CHECKING([whether have cpumask_of_node])
- LB_LINUX_TRY_COMPILE([
- #include <linux/topology.h>
- ],[
- cpumask_t *mask = cpumask_of_node(0);
- ],[
- AC_DEFINE(HAVE_CPUMASK_OF_NODE, 1, [have cpumask_of_node])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- ])
-
- AC_MSG_CHECKING([whether have cpumask_copy])
- LB_LINUX_TRY_COMPILE([
- #include <linux/cpumask.h>
- ],[
- cpumask_copy(NULL, NULL);
- ],[
- AC_DEFINE(HAVE_CPUMASK_COPY, 1, [have cpumask_copy])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- ])
-
- AC_MSG_CHECKING([whether have node_to_cpumask])
- LB_LINUX_TRY_COMPILE([
- #include <linux/topology.h>
- ],[
- cpumask_t mask = node_to_cpumask(0);
- ],[
- AC_DEFINE(HAVE_NODE_TO_CPUMASK, 1, [have node_to_cpumask])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- ])
-],[
- AC_MSG_RESULT(NO)
-])
-])
-
-
-# 2.6.24 request not use real numbers for ctl_name
-AC_DEFUN([LIBCFS_SYSCTL_UNNUMBERED],
-[AC_MSG_CHECKING([for CTL_UNNUMBERED])
-LB_LINUX_TRY_COMPILE([
- #include <linux/sysctl.h>
-],[
- #ifndef CTL_UNNUMBERED
- #error CTL_UNNUMBERED not exist in kernel
- #endif
-],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SYSCTL_UNNUMBERED, 1,
- [sysctl has CTL_UNNUMBERED])
-],[
- AC_MSG_RESULT(NO)
-])
-])
-
-#
-# LIBCFS_FUNC_DUMP_TRACE
-#
-# 2.6.23 exports dump_trace() so we can dump_stack() on any task
-# 2.6.24 has stacktrace_ops.address with "reliable" parameter
-#
-AC_DEFUN([LIBCFS_FUNC_DUMP_TRACE],
-[LB_CHECK_SYMBOL_EXPORT([dump_trace],
-[kernel/ksyms.c arch/${LINUX_ARCH%_64}/kernel/traps_64.c arch/x86/kernel/dumpstack_32.c arch/x86/kernel/dumpstack_64.c],[
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- AC_MSG_CHECKING([whether we can really use dump_trace])
- LB_LINUX_TRY_COMPILE([
- struct task_struct;
- struct pt_regs;
- #include <asm/stacktrace.h>
- ],[
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_DUMP_TRACE, 1, [dump_trace is exported])
- ],[
- AC_MSG_RESULT(no)
- ],[
- ])
- AC_MSG_CHECKING([whether print_trace_address has reliable argument])
- LB_LINUX_TRY_COMPILE([
- struct task_struct;
- struct pt_regs;
- #include <asm/stacktrace.h>
- ],[
- ((struct stacktrace_ops *)0)->address(NULL, 0, 0);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_TRACE_ADDRESS_RELIABLE, 1,
- [print_trace_address has reliable argument])
- ],[
- AC_MSG_RESULT(no)
- ],[
- ])
- AC_MSG_CHECKING([whether stacktrace_ops.warning is exist])
- LB_LINUX_TRY_COMPILE([
- struct task_struct;
- struct pt_regs;
- #include <asm/stacktrace.h>
- ],[
- ((struct stacktrace_ops *)0)->warning(NULL, NULL);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_STACKTRACE_WARNING, 1, [stacktrace_ops.warning is exist])
- ],[
- AC_MSG_RESULT(no)
- ],[
- ])
- AC_MSG_CHECKING([dump_trace want address])
- LB_LINUX_TRY_COMPILE([
- struct task_struct;
- struct pt_regs;
- #include <asm/stacktrace.h>
- ],[
- dump_trace(NULL, NULL, NULL, 0, NULL, NULL);
- ],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_DUMP_TRACE_ADDRESS, 1,
- [dump_trace want address argument])
- ],[
- AC_MSG_RESULT(no)
- ],[
- ])
-
-EXTRA_KCFLAGS="$tmp_flags"
-])
-])
-
-
-# 2.6.27 have second argument to sock_map_fd
-AC_DEFUN([LIBCFS_SOCK_MAP_FD_2ARG],
-[AC_MSG_CHECKING([sock_map_fd have second argument])
-LB_LINUX_TRY_COMPILE([
- #include <linux/net.h>
-],[
- sock_map_fd(NULL, 0);
-],[
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SOCK_MAP_FD_2ARG, 1,
- [sock_map_fd have second argument])
-],[
- AC_MSG_RESULT(NO)
-])
-])
-
-#
-# LIBCFS_HAVE_IS_COMPAT_TASK
-#
-# Added in 2.6.17, it wasn't until 2.6.29 that all
-# Linux architectures have is_compat_task()
-#
-AC_DEFUN([LIBCFS_HAVE_IS_COMPAT_TASK],
-[AC_MSG_CHECKING([if is_compat_task() is declared])
-LB_LINUX_TRY_COMPILE([
- #include <linux/compat.h>
-],[
- int i __attribute__ ((unused));
- i = is_compat_task();
-],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_IS_COMPAT_TASK, 1, [is_compat_task() is available])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
#
# LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
#
])
])
-AC_DEFUN([LIBCFS_HAVE_KEYTYPE_H],
-[LB_CHECK_FILE([$LINUX/include/linux/key-type.h], [
- AC_DEFINE(HAVE_LINUX_KEYTYPE_H, 1,
- [kernel has include/key-type.h])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
#
# RHEL6/2.6.32 want to have pointer to shrinker self pointer in handler function
#
AC_DEFINE(HAVE_SK_SLEEP, 1, [kernel has sk_sleep])
],[
AC_MSG_RESULT(no)
+],[
+])
+])
+
+# 2.6.39 adds a base pointer address argument to dump_trace
+AC_DEFUN([LIBCFS_DUMP_TRACE_ADDRESS],
+[AC_MSG_CHECKING([dump_trace want address])
+LB_LINUX_TRY_COMPILE([
+ struct task_struct;
+ struct pt_regs;
+ #include <asm/stacktrace.h>
+],[
+ dump_trace(NULL, NULL, NULL, 0, NULL, NULL);
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_DUMP_TRACE_ADDRESS, 1,
+ [dump_trace want address argument])
+],[
+ AC_MSG_RESULT(no)
+],[
])
])
])
])
+# 3.0 removes stacktrace_ops warning* functions
+AC_DEFUN([LIBCFS_STACKTRACE_WARNING],
+[AC_MSG_CHECKING([whether stacktrace_ops.warning is exist])
+LB_LINUX_TRY_COMPILE([
+ struct task_struct;
+ struct pt_regs;
+ #include <asm/stacktrace.h>
+],[
+ ((struct stacktrace_ops *)0)->warning(NULL, NULL);
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_STACKTRACE_WARNING, 1, [stacktrace_ops.warning is exist])
+],[
+ AC_MSG_RESULT(no)
+],[
+])
+])
+
#
# FC18 3.7.2-201 unexport sock_map_fd() change to
# use sock_alloc_file().
])
])
+AC_DEFUN([LIBCFS_HAVE_CRC32],
+[LB_LINUX_CONFIG_IM([CRC32],
+ [have_crc32=true],[have_crc32=false])
+if test x$have_crc32 = xtrue; then
+ AC_DEFINE(HAVE_CRC32, 1, [kernel compiled with CRC32 functions])
+fi
+])
+
+AC_DEFUN([LIBCFS_ENABLE_CRC32_ACCEL],
+[LB_LINUX_CONFIG_IM([CRYPTO_CRC32_PCLMUL],
+ [enable_crc32_crypto=false],[enable_crc32_crypto=true])
+if test x$have_crc32 = xtrue -a x$enable_crc32_crypto = xtrue; then
+ AC_DEFINE(NEED_CRC32_ACCEL, 1, [need pclmulqdq based crc32])
+ AC_MSG_WARN([No crc32 pclmulqdq crypto api found,
+ enable internal pclmulqdq based crc32])
+fi
+])
+
+AC_DEFUN([LIBCFS_ENABLE_CRC32C_ACCEL],
+[LB_LINUX_CONFIG_IM([CRYPTO_CRC32C_INTEL],
+ [enable_crc32c_crypto=false],[enable_crc32c_crypto=true])
+if test x$enable_crc32c_crypto = xtrue; then
+ AC_DEFINE(NEED_CRC32C_ACCEL, 1, [need pclmulqdq based crc32c])
+ AC_MSG_WARN([No crc32c pclmulqdq crypto api found,
+ enable internal pclmulqdq based crc32c])
+fi
+])
+
#
# LIBCFS_PROG_LINUX
#
LIBCFS_CONFIG_PANIC_DUMPLOG
LIBCFS_U64_LONG_LONG_LINUX
-# 2.6.18
-LIBCFS_HAVE_IS_COMPAT_TASK
-# 2.6.24
-LIBCFS_SYSCTL_UNNUMBERED
-LIBCFS_FUNC_DUMP_TRACE
-LIBCFS_HAVE_KEYTYPE_H
-# 2.6.28
-LIBCFS_CPUMASK_SIZE
-# 2.6.29
-LIBCFS_CPU_TOPOLOGY
-# 2.6.30
-LIBCFS_SOCK_MAP_FD_2ARG
# 2.6.32
LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
LC_SHRINKER_WANT_SHRINK_PTR
LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE
# 2.6.35
LC_SK_SLEEP
+# 2.6.39
+LIBCFS_DUMP_TRACE_ADDRESS
# 2.6.40 fc15
LC_SHRINK_CONTROL
+# 3.0
+LIBCFS_STACKTRACE_WARNING
# 3.7
LIBCFS_SOCK_ALLOC_FILE
+# 3.8
+LIBCFS_HAVE_CRC32
+LIBCFS_ENABLE_CRC32_ACCEL
+# 3.10
+LIBCFS_ENABLE_CRC32C_ACCEL
])
#
#
AC_DEFUN([LIBCFS_CONDITIONALS],
[
+AM_CONDITIONAL(HAVE_CRC32, test x$have_crc32 = xtrue)
+AM_CONDITIONAL(NEED_PCLMULQDQ_CRC32, test x$have_crc32 = xtrue -a x$enable_crc32_crypto = xtrue)
+AM_CONDITIONAL(NEED_PCLMULQDQ_CRC32C, test x$enable_crc32c_crypto = xtrue)
])
#