diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-17 13:55:25 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-17 13:55:25 -0400 |
commit | 1345df21ac542daa9d8613f89a3f0b5f32d636f8 (patch) | |
tree | ee6d9b629c3335641bc7be1261aafda4203e67ff /kernel | |
parent | c2ea72fd869145130969d6b07273c479cf2a22f5 (diff) | |
parent | eef7635a22f6b144206b5ca2f1398f637acffc4d (diff) |
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fixes from Ingo Molnar:
"A fix for an abs()/abs64() bug that caused too slow NTP convergence on
32-bit kernels, plus a removal of an obsolete clockevents driver
facility after all users got converted during the merge window"
* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
clockevents: Remove unused set_mode() callback
time: Fix timekeeping_freqadjust()'s incorrect use of abs() instead of abs64()
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/time/clockevents.c | 42 | ||||
-rw-r--r-- | kernel/time/tick-common.c | 1 | ||||
-rw-r--r-- | kernel/time/timekeeping.c | 2 | ||||
-rw-r--r-- | kernel/time/timer_list.c | 54 |
4 files changed, 26 insertions, 73 deletions
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index 50eb107f1198..a9b76a40319e 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c | |||
@@ -97,20 +97,6 @@ EXPORT_SYMBOL_GPL(clockevent_delta2ns); | |||
97 | static int __clockevents_switch_state(struct clock_event_device *dev, | 97 | static int __clockevents_switch_state(struct clock_event_device *dev, |
98 | enum clock_event_state state) | 98 | enum clock_event_state state) |
99 | { | 99 | { |
100 | /* Transition with legacy set_mode() callback */ | ||
101 | if (dev->set_mode) { | ||
102 | /* Legacy callback doesn't support new modes */ | ||
103 | if (state > CLOCK_EVT_STATE_ONESHOT) | ||
104 | return -ENOSYS; | ||
105 | /* | ||
106 | * 'clock_event_state' and 'clock_event_mode' have 1-to-1 | ||
107 | * mapping until *_ONESHOT, and so a simple cast will work. | ||
108 | */ | ||
109 | dev->set_mode((enum clock_event_mode)state, dev); | ||
110 | dev->mode = (enum clock_event_mode)state; | ||
111 | return 0; | ||
112 | } | ||
113 | |||
114 | if (dev->features & CLOCK_EVT_FEAT_DUMMY) | 100 | if (dev->features & CLOCK_EVT_FEAT_DUMMY) |
115 | return 0; | 101 | return 0; |
116 | 102 | ||
@@ -204,12 +190,8 @@ int clockevents_tick_resume(struct clock_event_device *dev) | |||
204 | { | 190 | { |
205 | int ret = 0; | 191 | int ret = 0; |
206 | 192 | ||
207 | if (dev->set_mode) { | 193 | if (dev->tick_resume) |
208 | dev->set_mode(CLOCK_EVT_MODE_RESUME, dev); | ||
209 | dev->mode = CLOCK_EVT_MODE_RESUME; | ||
210 | } else if (dev->tick_resume) { | ||
211 | ret = dev->tick_resume(dev); | 194 | ret = dev->tick_resume(dev); |
212 | } | ||
213 | 195 | ||
214 | return ret; | 196 | return ret; |
215 | } | 197 | } |
@@ -460,26 +442,6 @@ int clockevents_unbind_device(struct clock_event_device *ced, int cpu) | |||
460 | } | 442 | } |
461 | EXPORT_SYMBOL_GPL(clockevents_unbind_device); | 443 | EXPORT_SYMBOL_GPL(clockevents_unbind_device); |
462 | 444 | ||
463 | /* Sanity check of state transition callbacks */ | ||
464 | static int clockevents_sanity_check(struct clock_event_device *dev) | ||
465 | { | ||
466 | /* Legacy set_mode() callback */ | ||
467 | if (dev->set_mode) { | ||
468 | /* We shouldn't be supporting new modes now */ | ||
469 | WARN_ON(dev->set_state_periodic || dev->set_state_oneshot || | ||
470 | dev->set_state_shutdown || dev->tick_resume || | ||
471 | dev->set_state_oneshot_stopped); | ||
472 | |||
473 | BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED); | ||
474 | return 0; | ||
475 | } | ||
476 | |||
477 | if (dev->features & CLOCK_EVT_FEAT_DUMMY) | ||
478 | return 0; | ||
479 | |||
480 | return 0; | ||
481 | } | ||
482 | |||
483 | /** | 445 | /** |
484 | * clockevents_register_device - register a clock event device | 446 | * clockevents_register_device - register a clock event device |
485 | * @dev: device to register | 447 | * @dev: device to register |
@@ -488,8 +450,6 @@ void clockevents_register_device(struct clock_event_device *dev) | |||
488 | { | 450 | { |
489 | unsigned long flags; | 451 | unsigned long flags; |
490 | 452 | ||
491 | BUG_ON(clockevents_sanity_check(dev)); | ||
492 | |||
493 | /* Initialize state to DETACHED */ | 453 | /* Initialize state to DETACHED */ |
494 | clockevent_set_state(dev, CLOCK_EVT_STATE_DETACHED); | 454 | clockevent_set_state(dev, CLOCK_EVT_STATE_DETACHED); |
495 | 455 | ||
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c index d11c55b6ab7d..4fcd99e12aa0 100644 --- a/kernel/time/tick-common.c +++ b/kernel/time/tick-common.c | |||
@@ -398,7 +398,6 @@ void tick_shutdown(unsigned int cpu) | |||
398 | * the set mode function! | 398 | * the set mode function! |
399 | */ | 399 | */ |
400 | clockevent_set_state(dev, CLOCK_EVT_STATE_DETACHED); | 400 | clockevent_set_state(dev, CLOCK_EVT_STATE_DETACHED); |
401 | dev->mode = CLOCK_EVT_MODE_UNUSED; | ||
402 | clockevents_exchange_device(dev, NULL); | 401 | clockevents_exchange_device(dev, NULL); |
403 | dev->event_handler = clockevents_handle_noop; | 402 | dev->event_handler = clockevents_handle_noop; |
404 | td->evtdev = NULL; | 403 | td->evtdev = NULL; |
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index f6ee2e6b6f5d..3739ac6aa473 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c | |||
@@ -1614,7 +1614,7 @@ static __always_inline void timekeeping_freqadjust(struct timekeeper *tk, | |||
1614 | negative = (tick_error < 0); | 1614 | negative = (tick_error < 0); |
1615 | 1615 | ||
1616 | /* Sort out the magnitude of the correction */ | 1616 | /* Sort out the magnitude of the correction */ |
1617 | tick_error = abs(tick_error); | 1617 | tick_error = abs64(tick_error); |
1618 | for (adj = 0; tick_error > interval; adj++) | 1618 | for (adj = 0; tick_error > interval; adj++) |
1619 | tick_error >>= 1; | 1619 | tick_error >>= 1; |
1620 | 1620 | ||
diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c index 129c96033e46..f75e35b60149 100644 --- a/kernel/time/timer_list.c +++ b/kernel/time/timer_list.c | |||
@@ -225,7 +225,7 @@ print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu) | |||
225 | (unsigned long long) dev->min_delta_ns); | 225 | (unsigned long long) dev->min_delta_ns); |
226 | SEQ_printf(m, " mult: %u\n", dev->mult); | 226 | SEQ_printf(m, " mult: %u\n", dev->mult); |
227 | SEQ_printf(m, " shift: %u\n", dev->shift); | 227 | SEQ_printf(m, " shift: %u\n", dev->shift); |
228 | SEQ_printf(m, " mode: %d\n", dev->mode); | 228 | SEQ_printf(m, " mode: %d\n", clockevent_get_state(dev)); |
229 | SEQ_printf(m, " next_event: %Ld nsecs\n", | 229 | SEQ_printf(m, " next_event: %Ld nsecs\n", |
230 | (unsigned long long) ktime_to_ns(dev->next_event)); | 230 | (unsigned long long) ktime_to_ns(dev->next_event)); |
231 | 231 | ||
@@ -233,40 +233,34 @@ print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu) | |||
233 | print_name_offset(m, dev->set_next_event); | 233 | print_name_offset(m, dev->set_next_event); |
234 | SEQ_printf(m, "\n"); | 234 | SEQ_printf(m, "\n"); |
235 | 235 | ||
236 | if (dev->set_mode) { | 236 | if (dev->set_state_shutdown) { |
237 | SEQ_printf(m, " set_mode: "); | 237 | SEQ_printf(m, " shutdown: "); |
238 | print_name_offset(m, dev->set_mode); | 238 | print_name_offset(m, dev->set_state_shutdown); |
239 | SEQ_printf(m, "\n"); | 239 | SEQ_printf(m, "\n"); |
240 | } else { | 240 | } |
241 | if (dev->set_state_shutdown) { | ||
242 | SEQ_printf(m, " shutdown: "); | ||
243 | print_name_offset(m, dev->set_state_shutdown); | ||
244 | SEQ_printf(m, "\n"); | ||
245 | } | ||
246 | 241 | ||
247 | if (dev->set_state_periodic) { | 242 | if (dev->set_state_periodic) { |
248 | SEQ_printf(m, " periodic: "); | 243 | SEQ_printf(m, " periodic: "); |
249 | print_name_offset(m, dev->set_state_periodic); | 244 | print_name_offset(m, dev->set_state_periodic); |
250 | SEQ_printf(m, "\n"); | 245 | SEQ_printf(m, "\n"); |
251 | } | 246 | } |
252 | 247 | ||
253 | if (dev->set_state_oneshot) { | 248 | if (dev->set_state_oneshot) { |
254 | SEQ_printf(m, " oneshot: "); | 249 | SEQ_printf(m, " oneshot: "); |
255 | print_name_offset(m, dev->set_state_oneshot); | 250 | print_name_offset(m, dev->set_state_oneshot); |
256 | SEQ_printf(m, "\n"); | 251 | SEQ_printf(m, "\n"); |
257 | } | 252 | } |
258 | 253 | ||
259 | if (dev->set_state_oneshot_stopped) { | 254 | if (dev->set_state_oneshot_stopped) { |
260 | SEQ_printf(m, " oneshot stopped: "); | 255 | SEQ_printf(m, " oneshot stopped: "); |
261 | print_name_offset(m, dev->set_state_oneshot_stopped); | 256 | print_name_offset(m, dev->set_state_oneshot_stopped); |
262 | SEQ_printf(m, "\n"); | 257 | SEQ_printf(m, "\n"); |
263 | } | 258 | } |
264 | 259 | ||
265 | if (dev->tick_resume) { | 260 | if (dev->tick_resume) { |
266 | SEQ_printf(m, " resume: "); | 261 | SEQ_printf(m, " resume: "); |
267 | print_name_offset(m, dev->tick_resume); | 262 | print_name_offset(m, dev->tick_resume); |
268 | SEQ_printf(m, "\n"); | 263 | SEQ_printf(m, "\n"); |
269 | } | ||
270 | } | 264 | } |
271 | 265 | ||
272 | SEQ_printf(m, " event_handler: "); | 266 | SEQ_printf(m, " event_handler: "); |