timer: Prepare to change all DEFINE_TIMER() callbacks
authorKees Cook <keescook@chromium.org>
Tue, 10 Oct 2017 04:52:09 +0000 (21:52 -0700)
committerKees Cook <keescook@chromium.org>
Wed, 8 Nov 2017 23:54:09 +0000 (15:54 -0800)
Before we can globally change the function prototype of all timer callbacks,
we have to change those set up by DEFINE_TIMER(). Prepare for this by
casting the callbacks until the prototype changes globally.

Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Kees Cook <keescook@chromium.org>
include/linux/timer.h

index a1af92bac0d5ef59bad750913aeac1a1793273d2..9f8895decb8241a17e6d11e729fc82ac35cd1a42 100644 (file)
@@ -63,6 +63,9 @@ struct timer_list {
 
 #define TIMER_TRACE_FLAGMASK   (TIMER_MIGRATING | TIMER_DEFERRABLE | TIMER_PINNED | TIMER_IRQSAFE)
 
+#define TIMER_DATA_TYPE                unsigned long
+#define TIMER_FUNC_TYPE                void (*)(TIMER_DATA_TYPE)
+
 #define __TIMER_INITIALIZER(_function, _data, _flags) {                \
                .entry = { .next = TIMER_ENTRY_STATIC },        \
                .function = (_function),                        \
@@ -74,7 +77,7 @@ struct timer_list {
 
 #define DEFINE_TIMER(_name, _function)                         \
        struct timer_list _name =                               \
-               __TIMER_INITIALIZER(_function, 0, 0)
+               __TIMER_INITIALIZER((TIMER_FUNC_TYPE)_function, 0, 0)
 
 void init_timer_key(struct timer_list *timer, unsigned int flags,
                    const char *name, struct lock_class_key *key);
@@ -147,9 +150,6 @@ static inline void init_timer_on_stack_key(struct timer_list *timer,
 #define setup_pinned_deferrable_timer_on_stack(timer, fn, data)                \
        __setup_timer_on_stack((timer), (fn), (data), TIMER_DEFERRABLE | TIMER_PINNED)
 
-#define TIMER_DATA_TYPE                unsigned long
-#define TIMER_FUNC_TYPE                void (*)(TIMER_DATA_TYPE)
-
 #ifndef CONFIG_LOCKDEP
 static inline void timer_setup(struct timer_list *timer,
                               void (*callback)(struct timer_list *),