Whamcloud - gitweb
LU-502 don't allow to kill service threads by OOM killer.
[fs/lustre-release.git] / libcfs / autoconf / lustre-libcfs.m4
index ac57060..4843432 100644 (file)
@@ -107,6 +107,10 @@ AC_DEFUN([LIBCFS_FUNC_SHOW_TASK],
 [kernel/ksyms.c kernel/sched.c],[
 AC_DEFINE(HAVE_SHOW_TASK, 1, [show_task is exported])
 ],[
+        LB_CHECK_SYMBOL_EXPORT([sched_show_task],
+        [kernel/ksyms.c kernel/sched.c],[
+        AC_DEFINE(HAVE_SCHED_SHOW_TASK, 1, [sched_show_task is exported])
+        ],[])
 ])
 ])
 
@@ -320,6 +324,22 @@ LB_LINUX_TRY_COMPILE([
 ])
 ])
 
+#2.6.23 has new shrinker API
+AC_DEFUN([LC_REGISTER_SHRINKER],
+[AC_MSG_CHECKING([if kernel has register_shrinker])
+LB_LINUX_TRY_COMPILE([
+        #include <linux/mm.h>
+],[
+        register_shrinker(NULL);
+], [
+        AC_MSG_RESULT([yes])
+        AC_DEFINE(HAVE_REGISTER_SHRINKER, 1,
+                [kernel has register_shrinker])
+],[
+        AC_MSG_RESULT([no])
+])
+])
+
 # 2.6.24 
 AC_DEFUN([LIBCFS_NETLINK_CBMUTEX],
 [AC_MSG_CHECKING([for mutex in netlink_kernel_create])
@@ -442,7 +462,7 @@ LB_LINUX_TRY_COMPILE([
 #
 AC_DEFUN([LIBCFS_FUNC_DUMP_TRACE],
 [LB_CHECK_SYMBOL_EXPORT([dump_trace],
-[kernel/ksyms.c arch/${LINUX_ARCH%_64}/kernel/traps_64.c],[
+[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])
@@ -466,7 +486,6 @@ AC_DEFUN([LIBCFS_FUNC_DUMP_TRACE],
                #include <asm/stacktrace.h>
        ],[
                struct stacktrace_ops ops;
-
                ops.address = print_addr;
        ],[
                AC_MSG_RESULT(yes)
@@ -476,6 +495,22 @@ AC_DEFUN([LIBCFS_FUNC_DUMP_TRACE],
                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"
 ])
 ])
@@ -627,6 +662,74 @@ LB_LINUX_TRY_COMPILE([
 ])
 ])
 
+AC_DEFUN([LIBCFS_HAVE_OOM_H],
+[LB_CHECK_FILE([$LINUX/include/linux/oom.h], [
+        AC_DEFINE(HAVE_LINUX_OOM_H, 1,
+                [kernel has include/oom.h])
+],[
+        AC_MSG_RESULT([no])
+])
+])
+
+# 2.6.18 store oom parameters in task struct.
+# 2.6.32 store oom parameters in signal struct
+AC_DEFUN([LIBCFS_OOMADJ_IN_SIG],
+[AC_MSG_CHECKING([kernel store oom parameters in task])
+LB_LINUX_TRY_COMPILE([
+        #include <linux/sched.h>
+],[
+        struct signal_struct s;
+
+        s.oom_adj = 0;
+],[
+        AC_MSG_RESULT(yes)
+        AC_DEFINE(HAVE_OOMADJ_IN_SIG, 1,
+                  [kernel store a oom parameters in signal struct])
+],[
+        AC_MSG_RESULT(no)
+])
+])
+
+#
+# LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE
+#
+# 2.6.34 adds __add_wait_queue_exclusive
+#
+AC_DEFUN([LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE],
+[AC_MSG_CHECKING([if __add_wait_queue_exclusive exists])
+LB_LINUX_TRY_COMPILE([
+        #include <linux/wait.h>
+],[
+        wait_queue_head_t queue;
+        wait_queue_t      wait;
+
+        __add_wait_queue_exclusive(&queue, &wait);
+],[
+        AC_MSG_RESULT(yes)
+        AC_DEFINE(HAVE___ADD_WAIT_QUEUE_EXCLUSIVE, 1,
+                  [__add_wait_queue_exclusive exists])
+],[
+        AC_MSG_RESULT(no)
+])
+])
+
+# RHEL6/2.6.32 want to have pointer to shrinker self pointer in handler function
+AC_DEFUN([LC_SHRINKER_WANT_SHRINK_PTR],
+[AC_MSG_CHECKING([shrinker want self pointer in handler])
+LB_LINUX_TRY_COMPILE([
+        #include <linux/mm.h>
+],[
+        struct shrinker tmp = {0};
+        tmp.shrink(NULL, 0, 0);
+],[
+        AC_MSG_RESULT(yes)
+        AC_DEFINE(HAVE_SHRINKER_WANT_SHRINK_PTR, 1,
+                  [shrinker want self pointer in handler])
+],[
+        AC_MSG_RESULT(no)
+])
+])
+
 #
 # LIBCFS_PROG_LINUX
 #
@@ -657,6 +760,7 @@ LIBCFS_KMEM_CACHE
 # 2.6.23
 LIBCFS_KMEM_CACHE_CREATE_DTOR
 LIBCFS_NETLINK_CBMUTEX
+LC_REGISTER_SHRINKER
 # 2.6.24
 LIBCFS_SYSCTL_UNNUMBERED
 LIBCFS_SCATTERLIST_SETPAGE
@@ -675,6 +779,11 @@ LIBCFS_FUNC_UNSHARE_FS_STRUCT
 LIBCFS_SOCK_MAP_FD_2ARG
 # 2.6.32
 LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
+LC_SHRINKER_WANT_SHRINK_PTR
+LIBCFS_HAVE_OOM_H
+LIBCFS_OOMADJ_IN_SIG
+# 2.6.34
+LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE
 ])
 
 #