aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-10-01 16:03:16 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-10-01 16:03:16 -0400
commitc42ed9f91fa1868db0e7748ec6d816a484b11890 (patch)
tree49d7b434d8e37f09fc266dd5550206d9d8abe553
parent82513545134453a9150a2177e7a5704dcd604f8e (diff)
parent69b73e95982649a1f2dc63b8f08f2113d28f7fed (diff)
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fixes from Thomas Gleixner: "This adds a new timer wheel function which is required for the conversion of the timer callback function from the 'unsigned long data' argument to 'struct timer_list *timer'. This conversion has two benefits: 1) It makes struct timer_list smaller 2) Many callers hand in a pointer to the timer or to the structure containing the timer, which happens via type casting both at setup and in the callback. This change gets rid of the typecasts. Once the conversion is complete, which is planned for 4.15, the old setup function and the intermediate typecast in the new setup function go away along with the data field in struct timer_list. Merging this now into mainline allows a smooth queueing of the actual conversion in the affected maintainer trees without creating dependencies" * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: um/time: Fixup namespace collision timer: Prepare to change timer callback argument type
-rw-r--r--arch/um/kernel/time.c4
-rw-r--r--include/linux/timer.h14
2 files changed, 16 insertions, 2 deletions
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c
index 0b034ebbda2a..7f69d17de354 100644
--- a/arch/um/kernel/time.c
+++ b/arch/um/kernel/time.c
@@ -98,7 +98,7 @@ static struct clocksource timer_clocksource = {
98 .flags = CLOCK_SOURCE_IS_CONTINUOUS, 98 .flags = CLOCK_SOURCE_IS_CONTINUOUS,
99}; 99};
100 100
101static void __init timer_setup(void) 101static void __init um_timer_setup(void)
102{ 102{
103 int err; 103 int err;
104 104
@@ -132,5 +132,5 @@ void read_persistent_clock(struct timespec *ts)
132void __init time_init(void) 132void __init time_init(void)
133{ 133{
134 timer_set_signal_handler(); 134 timer_set_signal_handler();
135 late_time_init = timer_setup; 135 late_time_init = um_timer_setup;
136} 136}
diff --git a/include/linux/timer.h b/include/linux/timer.h
index e6789b8757d5..6383c528b148 100644
--- a/include/linux/timer.h
+++ b/include/linux/timer.h
@@ -168,6 +168,20 @@ static inline void init_timer_on_stack_key(struct timer_list *timer,
168#define setup_pinned_deferrable_timer_on_stack(timer, fn, data) \ 168#define setup_pinned_deferrable_timer_on_stack(timer, fn, data) \
169 __setup_timer_on_stack((timer), (fn), (data), TIMER_DEFERRABLE | TIMER_PINNED) 169 __setup_timer_on_stack((timer), (fn), (data), TIMER_DEFERRABLE | TIMER_PINNED)
170 170
171#define TIMER_DATA_TYPE unsigned long
172#define TIMER_FUNC_TYPE void (*)(TIMER_DATA_TYPE)
173
174static inline void timer_setup(struct timer_list *timer,
175 void (*callback)(struct timer_list *),
176 unsigned int flags)
177{
178 __setup_timer(timer, (TIMER_FUNC_TYPE)callback,
179 (TIMER_DATA_TYPE)timer, flags);
180}
181
182#define from_timer(var, callback_timer, timer_fieldname) \
183 container_of(callback_timer, typeof(*var), timer_fieldname)
184
171/** 185/**
172 * timer_pending - is a timer pending? 186 * timer_pending - is a timer pending?
173 * @timer: the timer in question 187 * @timer: the timer in question