diff options
author | Kees Cook <keescook@chromium.org> | 2017-10-22 21:48:43 -0400 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2017-11-21 18:57:15 -0500 |
commit | 919b250f8570618e84af544c3e18dad5210eb9b6 (patch) | |
tree | 1d40f3839c10ee62e70b5db4ac5ba30aa3e4a1c0 /include/linux/timer.h | |
parent | 188665b2d67db8953899551d1a9d4481b2a0ac60 (diff) |
timer: Remove redundant __setup_timer*() macros
With __init_timer*() now matching __setup_timer*(), remove the redundant
internal interface, clean up the resulting definitions and add more
documentation.
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tejun Heo <tj@kernel.org>
Cc: Lai Jiangshan <jiangshanlai@gmail.com>
Cc: Shaohua Li <shli@fb.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Diffstat (limited to 'include/linux/timer.h')
-rw-r--r-- | include/linux/timer.h | 56 |
1 files changed, 20 insertions, 36 deletions
diff --git a/include/linux/timer.h b/include/linux/timer.h index aff73b1c8f7b..b1ae64b112c2 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h | |||
@@ -78,6 +78,9 @@ struct timer_list { | |||
78 | struct timer_list _name = \ | 78 | struct timer_list _name = \ |
79 | __TIMER_INITIALIZER((TIMER_FUNC_TYPE)_function, 0) | 79 | __TIMER_INITIALIZER((TIMER_FUNC_TYPE)_function, 0) |
80 | 80 | ||
81 | /* | ||
82 | * LOCKDEP and DEBUG timer interfaces. | ||
83 | */ | ||
81 | void init_timer_key(struct timer_list *timer, | 84 | void init_timer_key(struct timer_list *timer, |
82 | void (*func)(struct timer_list *), unsigned int flags, | 85 | void (*func)(struct timer_list *), unsigned int flags, |
83 | const char *name, struct lock_class_key *key); | 86 | const char *name, struct lock_class_key *key); |
@@ -87,9 +90,7 @@ extern void init_timer_on_stack_key(struct timer_list *timer, | |||
87 | void (*func)(struct timer_list *), | 90 | void (*func)(struct timer_list *), |
88 | unsigned int flags, const char *name, | 91 | unsigned int flags, const char *name, |
89 | struct lock_class_key *key); | 92 | struct lock_class_key *key); |
90 | extern void destroy_timer_on_stack(struct timer_list *timer); | ||
91 | #else | 93 | #else |
92 | static inline void destroy_timer_on_stack(struct timer_list *timer) { } | ||
93 | static inline void init_timer_on_stack_key(struct timer_list *timer, | 94 | static inline void init_timer_on_stack_key(struct timer_list *timer, |
94 | void (*func)(struct timer_list *), | 95 | void (*func)(struct timer_list *), |
95 | unsigned int flags, | 96 | unsigned int flags, |
@@ -120,43 +121,26 @@ static inline void init_timer_on_stack_key(struct timer_list *timer, | |||
120 | init_timer_on_stack_key((_timer), (_fn), (_flags), NULL, NULL) | 121 | init_timer_on_stack_key((_timer), (_fn), (_flags), NULL, NULL) |
121 | #endif | 122 | #endif |
122 | 123 | ||
123 | #define __setup_timer(_timer, _fn, _flags) \ | 124 | /** |
124 | do { \ | 125 | * timer_setup - prepare a timer for first use |
125 | __init_timer((_timer), (_fn), (_flags)); \ | 126 | * @timer: the timer in question |
126 | } while (0) | 127 | * @callback: the function to call when timer expires |
127 | 128 | * @flags: any TIMER_* flags | |
128 | #define __setup_timer_on_stack(_timer, _fn, _flags) \ | 129 | * |
129 | do { \ | 130 | * Regular timer initialization should use either DEFINE_TIMER() above, |
130 | __init_timer_on_stack((_timer), (_fn), (_flags)); \ | 131 | * or timer_setup(). For timers on the stack, timer_setup_on_stack() must |
131 | } while (0) | 132 | * be used and must be balanced with a call to destroy_timer_on_stack(). |
133 | */ | ||
134 | #define timer_setup(timer, callback, flags) \ | ||
135 | __init_timer((timer), (callback), (flags)) | ||
132 | 136 | ||
133 | #ifndef CONFIG_LOCKDEP | 137 | #define timer_setup_on_stack(timer, callback, flags) \ |
134 | static inline void timer_setup(struct timer_list *timer, | 138 | __init_timer_on_stack((timer), (callback), (flags)) |
135 | void (*callback)(struct timer_list *), | ||
136 | unsigned int flags) | ||
137 | { | ||
138 | __setup_timer(timer, (TIMER_FUNC_TYPE)callback, flags); | ||
139 | } | ||
140 | 139 | ||
141 | static inline void timer_setup_on_stack(struct timer_list *timer, | 140 | #ifdef CONFIG_DEBUG_OBJECTS_TIMERS |
142 | void (*callback)(struct timer_list *), | 141 | extern void destroy_timer_on_stack(struct timer_list *timer); |
143 | unsigned int flags) | ||
144 | { | ||
145 | __setup_timer_on_stack(timer, (TIMER_FUNC_TYPE)callback, flags); | ||
146 | } | ||
147 | #else | 142 | #else |
148 | /* | 143 | static inline void destroy_timer_on_stack(struct timer_list *timer) { } |
149 | * Under LOCKDEP, the timer lock_class_key (set up in __init_timer) needs | ||
150 | * to be tied to the caller's context, so an inline (above) won't work. We | ||
151 | * do want to keep the inline for argument type checking, though. | ||
152 | */ | ||
153 | # define timer_setup(timer, callback, flags) \ | ||
154 | __setup_timer((timer), (TIMER_FUNC_TYPE)(callback), \ | ||
155 | (flags)) | ||
156 | # define timer_setup_on_stack(timer, callback, flags) \ | ||
157 | __setup_timer_on_stack((timer), \ | ||
158 | (TIMER_FUNC_TYPE)(callback), \ | ||
159 | (flags)) | ||
160 | #endif | 144 | #endif |
161 | 145 | ||
162 | #define from_timer(var, callback_timer, timer_fieldname) \ | 146 | #define from_timer(var, callback_timer, timer_fieldname) \ |