|
@@ -78,6 +78,9 @@ struct timer_list {
|
|
struct timer_list _name = \
|
|
struct timer_list _name = \
|
|
__TIMER_INITIALIZER((TIMER_FUNC_TYPE)_function, 0)
|
|
__TIMER_INITIALIZER((TIMER_FUNC_TYPE)_function, 0)
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * LOCKDEP and DEBUG timer interfaces.
|
|
|
|
+ */
|
|
void init_timer_key(struct timer_list *timer,
|
|
void init_timer_key(struct timer_list *timer,
|
|
void (*func)(struct timer_list *), unsigned int flags,
|
|
void (*func)(struct timer_list *), unsigned int flags,
|
|
const char *name, struct lock_class_key *key);
|
|
const char *name, struct lock_class_key *key);
|
|
@@ -87,9 +90,7 @@ extern void init_timer_on_stack_key(struct timer_list *timer,
|
|
void (*func)(struct timer_list *),
|
|
void (*func)(struct timer_list *),
|
|
unsigned int flags, const char *name,
|
|
unsigned int flags, const char *name,
|
|
struct lock_class_key *key);
|
|
struct lock_class_key *key);
|
|
-extern void destroy_timer_on_stack(struct timer_list *timer);
|
|
|
|
#else
|
|
#else
|
|
-static inline void destroy_timer_on_stack(struct timer_list *timer) { }
|
|
|
|
static inline void init_timer_on_stack_key(struct timer_list *timer,
|
|
static inline void init_timer_on_stack_key(struct timer_list *timer,
|
|
void (*func)(struct timer_list *),
|
|
void (*func)(struct timer_list *),
|
|
unsigned int flags,
|
|
unsigned int flags,
|
|
@@ -120,43 +121,26 @@ static inline void init_timer_on_stack_key(struct timer_list *timer,
|
|
init_timer_on_stack_key((_timer), (_fn), (_flags), NULL, NULL)
|
|
init_timer_on_stack_key((_timer), (_fn), (_flags), NULL, NULL)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-#define __setup_timer(_timer, _fn, _flags) \
|
|
|
|
- do { \
|
|
|
|
- __init_timer((_timer), (_fn), (_flags)); \
|
|
|
|
- } while (0)
|
|
|
|
-
|
|
|
|
-#define __setup_timer_on_stack(_timer, _fn, _flags) \
|
|
|
|
- do { \
|
|
|
|
- __init_timer_on_stack((_timer), (_fn), (_flags)); \
|
|
|
|
- } while (0)
|
|
|
|
|
|
+/**
|
|
|
|
+ * timer_setup - prepare a timer for first use
|
|
|
|
+ * @timer: the timer in question
|
|
|
|
+ * @callback: the function to call when timer expires
|
|
|
|
+ * @flags: any TIMER_* flags
|
|
|
|
+ *
|
|
|
|
+ * Regular timer initialization should use either DEFINE_TIMER() above,
|
|
|
|
+ * or timer_setup(). For timers on the stack, timer_setup_on_stack() must
|
|
|
|
+ * be used and must be balanced with a call to destroy_timer_on_stack().
|
|
|
|
+ */
|
|
|
|
+#define timer_setup(timer, callback, flags) \
|
|
|
|
+ __init_timer((timer), (callback), (flags))
|
|
|
|
|
|
-#ifndef CONFIG_LOCKDEP
|
|
|
|
-static inline void timer_setup(struct timer_list *timer,
|
|
|
|
- void (*callback)(struct timer_list *),
|
|
|
|
- unsigned int flags)
|
|
|
|
-{
|
|
|
|
- __setup_timer(timer, (TIMER_FUNC_TYPE)callback, flags);
|
|
|
|
-}
|
|
|
|
|
|
+#define timer_setup_on_stack(timer, callback, flags) \
|
|
|
|
+ __init_timer_on_stack((timer), (callback), (flags))
|
|
|
|
|
|
-static inline void timer_setup_on_stack(struct timer_list *timer,
|
|
|
|
- void (*callback)(struct timer_list *),
|
|
|
|
- unsigned int flags)
|
|
|
|
-{
|
|
|
|
- __setup_timer_on_stack(timer, (TIMER_FUNC_TYPE)callback, flags);
|
|
|
|
-}
|
|
|
|
|
|
+#ifdef CONFIG_DEBUG_OBJECTS_TIMERS
|
|
|
|
+extern void destroy_timer_on_stack(struct timer_list *timer);
|
|
#else
|
|
#else
|
|
-/*
|
|
|
|
- * Under LOCKDEP, the timer lock_class_key (set up in __init_timer) needs
|
|
|
|
- * to be tied to the caller's context, so an inline (above) won't work. We
|
|
|
|
- * do want to keep the inline for argument type checking, though.
|
|
|
|
- */
|
|
|
|
-# define timer_setup(timer, callback, flags) \
|
|
|
|
- __setup_timer((timer), (TIMER_FUNC_TYPE)(callback), \
|
|
|
|
- (flags))
|
|
|
|
-# define timer_setup_on_stack(timer, callback, flags) \
|
|
|
|
- __setup_timer_on_stack((timer), \
|
|
|
|
- (TIMER_FUNC_TYPE)(callback), \
|
|
|
|
- (flags))
|
|
|
|
|
|
+static inline void destroy_timer_on_stack(struct timer_list *timer) { }
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#define from_timer(var, callback_timer, timer_fieldname) \
|
|
#define from_timer(var, callback_timer, timer_fieldname) \
|