+# 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 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 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.20 API change INIT_WORK use 2 args and not
+# store data inside
+AC_DEFUN([LIBCFS_3ARGS_INIT_WORK],
+[AC_MSG_CHECKING([check INIT_WORK want 3 args])