]) # LIBCFS_NEW_KERNEL_WRITE
#
+# LIBCFS_DEFINE_TIMER
+#
+# Kernel version 4.14 commit 1d27e3e2252ba9d949ca82fbdb73cde102cb2067
+# remove expires and data arguments from DEFINE_TIMER. Also the callback
+# when from using unsigned long argument to using struct timer_list pointer.
+#
+AC_DEFUN([LIBCFS_DEFINE_TIMER], [
+LB_CHECK_COMPILE([if DEFINE_TIMER takes only 2 arguments],
+define_timer, [
+ #include <linux/timer.h>
+],[
+ static DEFINE_TIMER(my_timer, NULL);
+],[
+ AC_DEFINE(HAVE_NEW_DEFINE_TIMER, 1,
+ [DEFINE_TIMER uses only 2 arguements])
+])
+]) # LIBCFS_DEFINE_TIMER
+
+#
# LIBCFS_TIMER_SETUP
#
# Kernel version 4.15 commit e99e88a9d2b067465adaa9c111ada99a041bef9a
# 4.13
LIBCFS_WAIT_QUEUE_ENTRY
# 4.14
+LIBCFS_DEFINE_TIMER
LIBCFS_NEW_KERNEL_WRITE
# 4.15
LIBCFS_TIMER_SETUP
return nsecs_to_jiffies(seconds * NSEC_PER_SEC);
}
+#ifdef HAVE_NEW_DEFINE_TIMER
+# ifndef TIMER_DATA_TYPE
+# define TIMER_DATA_TYPE struct timer_list *
+# endif
+
+#define CFS_DEFINE_TIMER(_name, _function, _expires, _data) \
+ DEFINE_TIMER((_name), (_function))
+#else
+# ifndef TIMER_DATA_TYPE
+# define TIMER_DATA_TYPE unsigned long
+# endif
+
+#define CFS_DEFINE_TIMER(_name, _function, _expires, _data) \
+ DEFINE_TIMER((_name), (_function), (_expires), (_data))
+#endif
+
#ifdef HAVE_TIMER_SETUP
#define cfs_timer_cb_arg_t struct timer_list *
#define cfs_from_timer(var, callback_timer, timer_fieldname) \
from_timer(var, callback_timer, timer_fieldname)
#define cfs_timer_setup(timer, callback, data, flags) \
timer_setup((timer), (callback), (flags))
-#define CFS_DEFINE_TIMER(_name, _function, _expires, _data) \
- DEFINE_TIMER((_name), (_function))
#define cfs_timer_cb_arg(var, timer_fieldname) (&(var)->timer_fieldname)
#else
#define cfs_timer_cb_arg_t unsigned long
#define cfs_from_timer(var, data, timer_fieldname) (typeof(var))(data)
#define cfs_timer_setup(timer, callback, data, flags) \
setup_timer((timer), (callback), (data))
-#define CFS_DEFINE_TIMER(_name, _function, _expires, _data) \
- DEFINE_TIMER((_name), (_function), (_expires), (_data))
#define cfs_timer_cb_arg(var, timer_fieldname) (cfs_timer_cb_arg_t)(var)
#endif
* All access to it should be under waiting_locks_spinlock.
*/
static LIST_HEAD(waiting_locks_list);
-static void waiting_locks_callback(cfs_timer_cb_arg_t unused);
+static void waiting_locks_callback(TIMER_DATA_TYPE unused);
static CFS_DEFINE_TIMER(waiting_locks_timer, waiting_locks_callback, 0, 0);
enum elt_state {
}
/* This is called from within a timer interrupt and cannot schedule */
-static void waiting_locks_callback(cfs_timer_cb_arg_t unused)
+static void waiting_locks_callback(TIMER_DATA_TYPE unused)
{
struct ldlm_lock *lock;
int need_dump = 0;