Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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()

+31 -97
+5 -24
include/linux/clockchips.h
··· 18 18 struct clock_event_device; 19 19 struct module; 20 20 21 - /* Clock event mode commands for legacy ->set_mode(): OBSOLETE */ 22 - enum clock_event_mode { 23 - CLOCK_EVT_MODE_UNUSED, 24 - CLOCK_EVT_MODE_SHUTDOWN, 25 - CLOCK_EVT_MODE_PERIODIC, 26 - CLOCK_EVT_MODE_ONESHOT, 27 - CLOCK_EVT_MODE_RESUME, 28 - }; 29 - 30 21 /* 31 22 * Possible states of a clock event device. 32 23 * ··· 77 86 * @min_delta_ns: minimum delta value in ns 78 87 * @mult: nanosecond to cycles multiplier 79 88 * @shift: nanoseconds to cycles divisor (power of two) 80 - * @mode: operating mode, relevant only to ->set_mode(), OBSOLETE 81 89 * @state_use_accessors:current state of the device, assigned by the core code 82 90 * @features: features 83 91 * @retries: number of forced programming retries 84 - * @set_mode: legacy set mode function, only for modes <= CLOCK_EVT_MODE_RESUME. 85 - * @set_state_periodic: switch state to periodic, if !set_mode 86 - * @set_state_oneshot: switch state to oneshot, if !set_mode 87 - * @set_state_oneshot_stopped: switch state to oneshot_stopped, if !set_mode 88 - * @set_state_shutdown: switch state to shutdown, if !set_mode 89 - * @tick_resume: resume clkevt device, if !set_mode 92 + * @set_state_periodic: switch state to periodic 93 + * @set_state_oneshot: switch state to oneshot 94 + * @set_state_oneshot_stopped: switch state to oneshot_stopped 95 + * @set_state_shutdown: switch state to shutdown 96 + * @tick_resume: resume clkevt device 90 97 * @broadcast: function to broadcast events 91 98 * @min_delta_ticks: minimum delta value in ticks stored for reconfiguration 92 99 * @max_delta_ticks: maximum delta value in ticks stored for reconfiguration ··· 105 116 u64 min_delta_ns; 106 117 u32 mult; 107 118 u32 shift; 108 - enum clock_event_mode mode; 109 119 enum clock_event_state state_use_accessors; 110 120 unsigned int features; 111 121 unsigned long retries; 112 122 113 - /* 114 - * State transition callback(s): Only one of the two groups should be 115 - * defined: 116 - * - set_mode(), only for modes <= CLOCK_EVT_MODE_RESUME. 117 - * - set_state_{shutdown|periodic|oneshot|oneshot_stopped}(), tick_resume(). 118 - */ 119 - void (*set_mode)(enum clock_event_mode mode, struct clock_event_device *); 120 123 int (*set_state_periodic)(struct clock_event_device *); 121 124 int (*set_state_oneshot)(struct clock_event_device *); 122 125 int (*set_state_oneshot_stopped)(struct clock_event_device *);
+1 -41
kernel/time/clockevents.c
··· 97 97 static int __clockevents_switch_state(struct clock_event_device *dev, 98 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 100 if (dev->features & CLOCK_EVT_FEAT_DUMMY) 115 101 return 0; 116 102 ··· 190 204 { 191 205 int ret = 0; 192 206 193 - if (dev->set_mode) { 194 - dev->set_mode(CLOCK_EVT_MODE_RESUME, dev); 195 - dev->mode = CLOCK_EVT_MODE_RESUME; 196 - } else if (dev->tick_resume) { 207 + if (dev->tick_resume) 197 208 ret = dev->tick_resume(dev); 198 - } 199 209 200 210 return ret; 201 211 } ··· 442 460 } 443 461 EXPORT_SYMBOL_GPL(clockevents_unbind_device); 444 462 445 - /* Sanity check of state transition callbacks */ 446 - static int clockevents_sanity_check(struct clock_event_device *dev) 447 - { 448 - /* Legacy set_mode() callback */ 449 - if (dev->set_mode) { 450 - /* We shouldn't be supporting new modes now */ 451 - WARN_ON(dev->set_state_periodic || dev->set_state_oneshot || 452 - dev->set_state_shutdown || dev->tick_resume || 453 - dev->set_state_oneshot_stopped); 454 - 455 - BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED); 456 - return 0; 457 - } 458 - 459 - if (dev->features & CLOCK_EVT_FEAT_DUMMY) 460 - return 0; 461 - 462 - return 0; 463 - } 464 - 465 463 /** 466 464 * clockevents_register_device - register a clock event device 467 465 * @dev: device to register ··· 449 487 void clockevents_register_device(struct clock_event_device *dev) 450 488 { 451 489 unsigned long flags; 452 - 453 - BUG_ON(clockevents_sanity_check(dev)); 454 490 455 491 /* Initialize state to DETACHED */ 456 492 clockevent_set_state(dev, CLOCK_EVT_STATE_DETACHED);
-1
kernel/time/tick-common.c
··· 398 398 * the set mode function! 399 399 */ 400 400 clockevent_set_state(dev, CLOCK_EVT_STATE_DETACHED); 401 - dev->mode = CLOCK_EVT_MODE_UNUSED; 402 401 clockevents_exchange_device(dev, NULL); 403 402 dev->event_handler = clockevents_handle_noop; 404 403 td->evtdev = NULL;
+1 -1
kernel/time/timekeeping.c
··· 1614 1614 negative = (tick_error < 0); 1615 1615 1616 1616 /* Sort out the magnitude of the correction */ 1617 - tick_error = abs(tick_error); 1617 + tick_error = abs64(tick_error); 1618 1618 for (adj = 0; tick_error > interval; adj++) 1619 1619 tick_error >>= 1; 1620 1620
+24 -30
kernel/time/timer_list.c
··· 225 225 (unsigned long long) dev->min_delta_ns); 226 226 SEQ_printf(m, " mult: %u\n", dev->mult); 227 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 229 SEQ_printf(m, " next_event: %Ld nsecs\n", 230 230 (unsigned long long) ktime_to_ns(dev->next_event)); 231 231 ··· 233 233 print_name_offset(m, dev->set_next_event); 234 234 SEQ_printf(m, "\n"); 235 235 236 - if (dev->set_mode) { 237 - SEQ_printf(m, " set_mode: "); 238 - print_name_offset(m, dev->set_mode); 236 + if (dev->set_state_shutdown) { 237 + SEQ_printf(m, " shutdown: "); 238 + print_name_offset(m, dev->set_state_shutdown); 239 239 SEQ_printf(m, "\n"); 240 - } else { 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 - } 240 + } 246 241 247 - if (dev->set_state_periodic) { 248 - SEQ_printf(m, " periodic: "); 249 - print_name_offset(m, dev->set_state_periodic); 250 - SEQ_printf(m, "\n"); 251 - } 242 + if (dev->set_state_periodic) { 243 + SEQ_printf(m, " periodic: "); 244 + print_name_offset(m, dev->set_state_periodic); 245 + SEQ_printf(m, "\n"); 246 + } 252 247 253 - if (dev->set_state_oneshot) { 254 - SEQ_printf(m, " oneshot: "); 255 - print_name_offset(m, dev->set_state_oneshot); 256 - SEQ_printf(m, "\n"); 257 - } 248 + if (dev->set_state_oneshot) { 249 + SEQ_printf(m, " oneshot: "); 250 + print_name_offset(m, dev->set_state_oneshot); 251 + SEQ_printf(m, "\n"); 252 + } 258 253 259 - if (dev->set_state_oneshot_stopped) { 260 - SEQ_printf(m, " oneshot stopped: "); 261 - print_name_offset(m, dev->set_state_oneshot_stopped); 262 - SEQ_printf(m, "\n"); 263 - } 254 + if (dev->set_state_oneshot_stopped) { 255 + SEQ_printf(m, " oneshot stopped: "); 256 + print_name_offset(m, dev->set_state_oneshot_stopped); 257 + SEQ_printf(m, "\n"); 258 + } 264 259 265 - if (dev->tick_resume) { 266 - SEQ_printf(m, " resume: "); 267 - print_name_offset(m, dev->tick_resume); 268 - SEQ_printf(m, "\n"); 269 - } 260 + if (dev->tick_resume) { 261 + SEQ_printf(m, " resume: "); 262 + print_name_offset(m, dev->tick_resume); 263 + SEQ_printf(m, "\n"); 270 264 } 271 265 272 266 SEQ_printf(m, " event_handler: ");