summaryrefslogtreecommitdiffstats
path: root/kernel/time
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2015-02-27 06:51:33 -0500
committerIngo Molnar <mingo@kernel.org>2015-03-27 05:26:19 -0400
commit77e32c89a7117614ab3d66d20c1088de721abfaa (patch)
tree197d7d66684509bffc639fd31870026e0c3dafbe /kernel/time
parent554ef3876c6acdff1331feab10275e9e9e0adb84 (diff)
clockevents: Manage device's state separately for the core
'enum clock_event_mode' is used for two purposes today: - to pass mode to the driver of clockevent device::set_mode(). - for managing state of the device for clockevents core. For supporting new modes/states we have moved away from the legacy set_mode() callback to new per-mode/state callbacks. New modes/states shouldn't be exposed to the legacy (now OBSOLOTE) callbacks and so we shouldn't add new states to 'enum clock_event_mode'. Lets have separate enums for the two use cases mentioned above. Keep using the earlier enum for legacy set_mode() callback and mark it OBSOLETE. And add another enum to clearly specify the possible states of a clockevent device. This also renames the newly added per-mode callbacks to reflect state changes. We haven't got rid of 'mode' member of 'struct clock_event_device' as it is used by some of the clockevent drivers and it would automatically die down once we migrate those drivers to the new interface. It ('mode') is only updated now for the drivers using the legacy interface. Suggested-by: Peter Zijlstra <peterz@infradead.org> Suggested-by: Ingo Molnar <mingo@kernel.org> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Daniel Lezcano <daniel.lezcano@linaro.org> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Kevin Hilman <khilman@linaro.org> Cc: Preeti U Murthy <preeti@linux.vnet.ibm.com> Cc: linaro-kernel@lists.linaro.org Cc: linaro-networking@linaro.org Cc: linux-arm-kernel@lists.infradead.org Link: http://lkml.kernel.org/r/b6b0143a8a57bd58352ad35e08c25424c879c0cb.1425037853.git.viresh.kumar@linaro.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/time')
-rw-r--r--kernel/time/clockevents.c99
-rw-r--r--kernel/time/tick-broadcast.c20
-rw-r--r--kernel/time/tick-common.c7
-rw-r--r--kernel/time/tick-oneshot.c6
-rw-r--r--kernel/time/timer_list.c12
5 files changed, 76 insertions, 68 deletions
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
index 1b0ea63de69c..6e53e9a0c2e8 100644
--- a/kernel/time/clockevents.c
+++ b/kernel/time/clockevents.c
@@ -94,44 +94,49 @@ u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt)
94} 94}
95EXPORT_SYMBOL_GPL(clockevent_delta2ns); 95EXPORT_SYMBOL_GPL(clockevent_delta2ns);
96 96
97static int __clockevents_set_mode(struct clock_event_device *dev, 97static int __clockevents_set_state(struct clock_event_device *dev,
98 enum clock_event_mode mode) 98 enum clock_event_state state)
99{ 99{
100 /* Transition with legacy set_mode() callback */ 100 /* Transition with legacy set_mode() callback */
101 if (dev->set_mode) { 101 if (dev->set_mode) {
102 /* Legacy callback doesn't support new modes */ 102 /* Legacy callback doesn't support new modes */
103 if (mode > CLOCK_EVT_MODE_ONESHOT) 103 if (state > CLOCK_EVT_STATE_ONESHOT)
104 return -ENOSYS; 104 return -ENOSYS;
105 dev->set_mode(mode, dev); 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;
106 return 0; 111 return 0;
107 } 112 }
108 113
109 if (dev->features & CLOCK_EVT_FEAT_DUMMY) 114 if (dev->features & CLOCK_EVT_FEAT_DUMMY)
110 return 0; 115 return 0;
111 116
112 /* Transition with new mode-specific callbacks */ 117 /* Transition with new state-specific callbacks */
113 switch (mode) { 118 switch (state) {
114 case CLOCK_EVT_MODE_UNUSED: 119 case CLOCK_EVT_STATE_DETACHED:
115 /* 120 /*
116 * This is an internal state, which is guaranteed to go from 121 * This is an internal state, which is guaranteed to go from
117 * SHUTDOWN to UNUSED. No driver interaction required. 122 * SHUTDOWN to DETACHED. No driver interaction required.
118 */ 123 */
119 return 0; 124 return 0;
120 125
121 case CLOCK_EVT_MODE_SHUTDOWN: 126 case CLOCK_EVT_STATE_SHUTDOWN:
122 return dev->set_mode_shutdown(dev); 127 return dev->set_state_shutdown(dev);
123 128
124 case CLOCK_EVT_MODE_PERIODIC: 129 case CLOCK_EVT_STATE_PERIODIC:
125 /* Core internal bug */ 130 /* Core internal bug */
126 if (!(dev->features & CLOCK_EVT_FEAT_PERIODIC)) 131 if (!(dev->features & CLOCK_EVT_FEAT_PERIODIC))
127 return -ENOSYS; 132 return -ENOSYS;
128 return dev->set_mode_periodic(dev); 133 return dev->set_state_periodic(dev);
129 134
130 case CLOCK_EVT_MODE_ONESHOT: 135 case CLOCK_EVT_STATE_ONESHOT:
131 /* Core internal bug */ 136 /* Core internal bug */
132 if (!(dev->features & CLOCK_EVT_FEAT_ONESHOT)) 137 if (!(dev->features & CLOCK_EVT_FEAT_ONESHOT))
133 return -ENOSYS; 138 return -ENOSYS;
134 return dev->set_mode_oneshot(dev); 139 return dev->set_state_oneshot(dev);
135 140
136 default: 141 default:
137 return -ENOSYS; 142 return -ENOSYS;
@@ -139,26 +144,26 @@ static int __clockevents_set_mode(struct clock_event_device *dev,
139} 144}
140 145
141/** 146/**
142 * clockevents_set_mode - set the operating mode of a clock event device 147 * clockevents_set_state - set the operating state of a clock event device
143 * @dev: device to modify 148 * @dev: device to modify
144 * @mode: new mode 149 * @state: new state
145 * 150 *
146 * Must be called with interrupts disabled ! 151 * Must be called with interrupts disabled !
147 */ 152 */
148void clockevents_set_mode(struct clock_event_device *dev, 153void clockevents_set_state(struct clock_event_device *dev,
149 enum clock_event_mode mode) 154 enum clock_event_state state)
150{ 155{
151 if (dev->mode != mode) { 156 if (dev->state != state) {
152 if (__clockevents_set_mode(dev, mode)) 157 if (__clockevents_set_state(dev, state))
153 return; 158 return;
154 159
155 dev->mode = mode; 160 dev->state = state;
156 161
157 /* 162 /*
158 * A nsec2cyc multiplicator of 0 is invalid and we'd crash 163 * A nsec2cyc multiplicator of 0 is invalid and we'd crash
159 * on it, so fix it up and emit a warning: 164 * on it, so fix it up and emit a warning:
160 */ 165 */
161 if (mode == CLOCK_EVT_MODE_ONESHOT) { 166 if (state == CLOCK_EVT_STATE_ONESHOT) {
162 if (unlikely(!dev->mult)) { 167 if (unlikely(!dev->mult)) {
163 dev->mult = 1; 168 dev->mult = 1;
164 WARN_ON(1); 169 WARN_ON(1);
@@ -173,7 +178,7 @@ void clockevents_set_mode(struct clock_event_device *dev,
173 */ 178 */
174void clockevents_shutdown(struct clock_event_device *dev) 179void clockevents_shutdown(struct clock_event_device *dev)
175{ 180{
176 clockevents_set_mode(dev, CLOCK_EVT_MODE_SHUTDOWN); 181 clockevents_set_state(dev, CLOCK_EVT_STATE_SHUTDOWN);
177 dev->next_event.tv64 = KTIME_MAX; 182 dev->next_event.tv64 = KTIME_MAX;
178} 183}
179 184
@@ -185,13 +190,12 @@ int clockevents_tick_resume(struct clock_event_device *dev)
185{ 190{
186 int ret = 0; 191 int ret = 0;
187 192
188 if (dev->set_mode) 193 if (dev->set_mode) {
189 dev->set_mode(CLOCK_EVT_MODE_RESUME, dev); 194 dev->set_mode(CLOCK_EVT_MODE_RESUME, dev);
190 else if (dev->tick_resume)
191 ret = dev->tick_resume(dev);
192
193 if (likely(!ret))
194 dev->mode = CLOCK_EVT_MODE_RESUME; 195 dev->mode = CLOCK_EVT_MODE_RESUME;
196 } else if (dev->tick_resume) {
197 ret = dev->tick_resume(dev);
198 }
195 199
196 return ret; 200 return ret;
197} 201}
@@ -248,7 +252,7 @@ static int clockevents_program_min_delta(struct clock_event_device *dev)
248 delta = dev->min_delta_ns; 252 delta = dev->min_delta_ns;
249 dev->next_event = ktime_add_ns(ktime_get(), delta); 253 dev->next_event = ktime_add_ns(ktime_get(), delta);
250 254
251 if (dev->mode == CLOCK_EVT_MODE_SHUTDOWN) 255 if (dev->state == CLOCK_EVT_STATE_SHUTDOWN)
252 return 0; 256 return 0;
253 257
254 dev->retries++; 258 dev->retries++;
@@ -285,7 +289,7 @@ static int clockevents_program_min_delta(struct clock_event_device *dev)
285 delta = dev->min_delta_ns; 289 delta = dev->min_delta_ns;
286 dev->next_event = ktime_add_ns(ktime_get(), delta); 290 dev->next_event = ktime_add_ns(ktime_get(), delta);
287 291
288 if (dev->mode == CLOCK_EVT_MODE_SHUTDOWN) 292 if (dev->state == CLOCK_EVT_STATE_SHUTDOWN)
289 return 0; 293 return 0;
290 294
291 dev->retries++; 295 dev->retries++;
@@ -317,7 +321,7 @@ int clockevents_program_event(struct clock_event_device *dev, ktime_t expires,
317 321
318 dev->next_event = expires; 322 dev->next_event = expires;
319 323
320 if (dev->mode == CLOCK_EVT_MODE_SHUTDOWN) 324 if (dev->state == CLOCK_EVT_STATE_SHUTDOWN)
321 return 0; 325 return 0;
322 326
323 /* Shortcut for clockevent devices that can deal with ktime. */ 327 /* Shortcut for clockevent devices that can deal with ktime. */
@@ -362,7 +366,7 @@ static int clockevents_replace(struct clock_event_device *ced)
362 struct clock_event_device *dev, *newdev = NULL; 366 struct clock_event_device *dev, *newdev = NULL;
363 367
364 list_for_each_entry(dev, &clockevent_devices, list) { 368 list_for_each_entry(dev, &clockevent_devices, list) {
365 if (dev == ced || dev->mode != CLOCK_EVT_MODE_UNUSED) 369 if (dev == ced || dev->state != CLOCK_EVT_STATE_DETACHED)
366 continue; 370 continue;
367 371
368 if (!tick_check_replacement(newdev, dev)) 372 if (!tick_check_replacement(newdev, dev))
@@ -388,7 +392,7 @@ static int clockevents_replace(struct clock_event_device *ced)
388static int __clockevents_try_unbind(struct clock_event_device *ced, int cpu) 392static int __clockevents_try_unbind(struct clock_event_device *ced, int cpu)
389{ 393{
390 /* Fast track. Device is unused */ 394 /* Fast track. Device is unused */
391 if (ced->mode == CLOCK_EVT_MODE_UNUSED) { 395 if (ced->state == CLOCK_EVT_STATE_DETACHED) {
392 list_del_init(&ced->list); 396 list_del_init(&ced->list);
393 return 0; 397 return 0;
394 } 398 }
@@ -438,30 +442,30 @@ int clockevents_unbind_device(struct clock_event_device *ced, int cpu)
438} 442}
439EXPORT_SYMBOL_GPL(clockevents_unbind); 443EXPORT_SYMBOL_GPL(clockevents_unbind);
440 444
441/* Sanity check of mode transition callbacks */ 445/* Sanity check of state transition callbacks */
442static int clockevents_sanity_check(struct clock_event_device *dev) 446static int clockevents_sanity_check(struct clock_event_device *dev)
443{ 447{
444 /* Legacy set_mode() callback */ 448 /* Legacy set_mode() callback */
445 if (dev->set_mode) { 449 if (dev->set_mode) {
446 /* We shouldn't be supporting new modes now */ 450 /* We shouldn't be supporting new modes now */
447 WARN_ON(dev->set_mode_periodic || dev->set_mode_oneshot || 451 WARN_ON(dev->set_state_periodic || dev->set_state_oneshot ||
448 dev->set_mode_shutdown || dev->tick_resume); 452 dev->set_state_shutdown || dev->tick_resume);
449 return 0; 453 return 0;
450 } 454 }
451 455
452 if (dev->features & CLOCK_EVT_FEAT_DUMMY) 456 if (dev->features & CLOCK_EVT_FEAT_DUMMY)
453 return 0; 457 return 0;
454 458
455 /* New mode-specific callbacks */ 459 /* New state-specific callbacks */
456 if (!dev->set_mode_shutdown) 460 if (!dev->set_state_shutdown)
457 return -EINVAL; 461 return -EINVAL;
458 462
459 if ((dev->features & CLOCK_EVT_FEAT_PERIODIC) && 463 if ((dev->features & CLOCK_EVT_FEAT_PERIODIC) &&
460 !dev->set_mode_periodic) 464 !dev->set_state_periodic)
461 return -EINVAL; 465 return -EINVAL;
462 466
463 if ((dev->features & CLOCK_EVT_FEAT_ONESHOT) && 467 if ((dev->features & CLOCK_EVT_FEAT_ONESHOT) &&
464 !dev->set_mode_oneshot) 468 !dev->set_state_oneshot)
465 return -EINVAL; 469 return -EINVAL;
466 470
467 return 0; 471 return 0;
@@ -478,6 +482,9 @@ void clockevents_register_device(struct clock_event_device *dev)
478 BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED); 482 BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED);
479 BUG_ON(clockevents_sanity_check(dev)); 483 BUG_ON(clockevents_sanity_check(dev));
480 484
485 /* Initialize state to DETACHED */
486 dev->state = CLOCK_EVT_STATE_DETACHED;
487
481 if (!dev->cpumask) { 488 if (!dev->cpumask) {
482 WARN_ON(num_possible_cpus() > 1); 489 WARN_ON(num_possible_cpus() > 1);
483 dev->cpumask = cpumask_of(smp_processor_id()); 490 dev->cpumask = cpumask_of(smp_processor_id());
@@ -541,11 +548,11 @@ int __clockevents_update_freq(struct clock_event_device *dev, u32 freq)
541{ 548{
542 clockevents_config(dev, freq); 549 clockevents_config(dev, freq);
543 550
544 if (dev->mode == CLOCK_EVT_MODE_ONESHOT) 551 if (dev->state == CLOCK_EVT_STATE_ONESHOT)
545 return clockevents_program_event(dev, dev->next_event, false); 552 return clockevents_program_event(dev, dev->next_event, false);
546 553
547 if (dev->mode == CLOCK_EVT_MODE_PERIODIC) 554 if (dev->state == CLOCK_EVT_STATE_PERIODIC)
548 return __clockevents_set_mode(dev, CLOCK_EVT_MODE_PERIODIC); 555 return __clockevents_set_state(dev, CLOCK_EVT_STATE_PERIODIC);
549 556
550 return 0; 557 return 0;
551} 558}
@@ -601,13 +608,13 @@ void clockevents_exchange_device(struct clock_event_device *old,
601 */ 608 */
602 if (old) { 609 if (old) {
603 module_put(old->owner); 610 module_put(old->owner);
604 clockevents_set_mode(old, CLOCK_EVT_MODE_UNUSED); 611 clockevents_set_state(old, CLOCK_EVT_STATE_DETACHED);
605 list_del(&old->list); 612 list_del(&old->list);
606 list_add(&old->list, &clockevents_released); 613 list_add(&old->list, &clockevents_released);
607 } 614 }
608 615
609 if (new) { 616 if (new) {
610 BUG_ON(new->mode != CLOCK_EVT_MODE_UNUSED); 617 BUG_ON(new->state != CLOCK_EVT_STATE_DETACHED);
611 clockevents_shutdown(new); 618 clockevents_shutdown(new);
612 } 619 }
613 local_irq_restore(flags); 620 local_irq_restore(flags);
@@ -693,7 +700,7 @@ int clockevents_notify(unsigned long reason, void *arg)
693 if (cpumask_test_cpu(cpu, dev->cpumask) && 700 if (cpumask_test_cpu(cpu, dev->cpumask) &&
694 cpumask_weight(dev->cpumask) == 1 && 701 cpumask_weight(dev->cpumask) == 1 &&
695 !tick_is_broadcast_device(dev)) { 702 !tick_is_broadcast_device(dev)) {
696 BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED); 703 BUG_ON(dev->state != CLOCK_EVT_STATE_DETACHED);
697 list_del(&dev->list); 704 list_del(&dev->list);
698 } 705 }
699 } 706 }
diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
index 542d5bb5c13d..f0f8ee9dbc28 100644
--- a/kernel/time/tick-broadcast.c
+++ b/kernel/time/tick-broadcast.c
@@ -303,7 +303,7 @@ static void tick_handle_periodic_broadcast(struct clock_event_device *dev)
303 /* 303 /*
304 * The device is in periodic mode. No reprogramming necessary: 304 * The device is in periodic mode. No reprogramming necessary:
305 */ 305 */
306 if (dev->mode == CLOCK_EVT_MODE_PERIODIC) 306 if (dev->state == CLOCK_EVT_STATE_PERIODIC)
307 goto unlock; 307 goto unlock;
308 308
309 /* 309 /*
@@ -532,8 +532,8 @@ static int tick_broadcast_set_event(struct clock_event_device *bc, int cpu,
532{ 532{
533 int ret; 533 int ret;
534 534
535 if (bc->mode != CLOCK_EVT_MODE_ONESHOT) 535 if (bc->state != CLOCK_EVT_STATE_ONESHOT)
536 clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT); 536 clockevents_set_state(bc, CLOCK_EVT_STATE_ONESHOT);
537 537
538 ret = clockevents_program_event(bc, expires, force); 538 ret = clockevents_program_event(bc, expires, force);
539 if (!ret) 539 if (!ret)
@@ -543,7 +543,7 @@ static int tick_broadcast_set_event(struct clock_event_device *bc, int cpu,
543 543
544int tick_resume_broadcast_oneshot(struct clock_event_device *bc) 544int tick_resume_broadcast_oneshot(struct clock_event_device *bc)
545{ 545{
546 clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT); 546 clockevents_set_state(bc, CLOCK_EVT_STATE_ONESHOT);
547 return 0; 547 return 0;
548} 548}
549 549
@@ -562,8 +562,8 @@ void tick_check_oneshot_broadcast_this_cpu(void)
562 * switched over, leave the device alone. 562 * switched over, leave the device alone.
563 */ 563 */
564 if (td->mode == TICKDEV_MODE_ONESHOT) { 564 if (td->mode == TICKDEV_MODE_ONESHOT) {
565 clockevents_set_mode(td->evtdev, 565 clockevents_set_state(td->evtdev,
566 CLOCK_EVT_MODE_ONESHOT); 566 CLOCK_EVT_STATE_ONESHOT);
567 } 567 }
568 } 568 }
569} 569}
@@ -666,7 +666,7 @@ static void broadcast_shutdown_local(struct clock_event_device *bc,
666 if (dev->next_event.tv64 < bc->next_event.tv64) 666 if (dev->next_event.tv64 < bc->next_event.tv64)
667 return; 667 return;
668 } 668 }
669 clockevents_set_mode(dev, CLOCK_EVT_MODE_SHUTDOWN); 669 clockevents_set_state(dev, CLOCK_EVT_STATE_SHUTDOWN);
670} 670}
671 671
672static void broadcast_move_bc(int deadcpu) 672static void broadcast_move_bc(int deadcpu)
@@ -741,7 +741,7 @@ int tick_broadcast_oneshot_control(unsigned long reason)
741 cpumask_clear_cpu(cpu, tick_broadcast_oneshot_mask); 741 cpumask_clear_cpu(cpu, tick_broadcast_oneshot_mask);
742 } else { 742 } else {
743 if (cpumask_test_and_clear_cpu(cpu, tick_broadcast_oneshot_mask)) { 743 if (cpumask_test_and_clear_cpu(cpu, tick_broadcast_oneshot_mask)) {
744 clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); 744 clockevents_set_state(dev, CLOCK_EVT_STATE_ONESHOT);
745 /* 745 /*
746 * The cpu which was handling the broadcast 746 * The cpu which was handling the broadcast
747 * timer marked this cpu in the broadcast 747 * timer marked this cpu in the broadcast
@@ -842,7 +842,7 @@ void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
842 842
843 /* Set it up only once ! */ 843 /* Set it up only once ! */
844 if (bc->event_handler != tick_handle_oneshot_broadcast) { 844 if (bc->event_handler != tick_handle_oneshot_broadcast) {
845 int was_periodic = bc->mode == CLOCK_EVT_MODE_PERIODIC; 845 int was_periodic = bc->state == CLOCK_EVT_STATE_PERIODIC;
846 846
847 bc->event_handler = tick_handle_oneshot_broadcast; 847 bc->event_handler = tick_handle_oneshot_broadcast;
848 848
@@ -858,7 +858,7 @@ void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
858 tick_broadcast_oneshot_mask, tmpmask); 858 tick_broadcast_oneshot_mask, tmpmask);
859 859
860 if (was_periodic && !cpumask_empty(tmpmask)) { 860 if (was_periodic && !cpumask_empty(tmpmask)) {
861 clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT); 861 clockevents_set_state(bc, CLOCK_EVT_STATE_ONESHOT);
862 tick_broadcast_init_next_event(tmpmask, 862 tick_broadcast_init_next_event(tmpmask,
863 tick_next_period); 863 tick_next_period);
864 tick_broadcast_set_event(bc, cpu, tick_next_period, 1); 864 tick_broadcast_set_event(bc, cpu, tick_next_period, 1);
diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
index 5c50664c21d7..a5b877130ae9 100644
--- a/kernel/time/tick-common.c
+++ b/kernel/time/tick-common.c
@@ -102,7 +102,7 @@ void tick_handle_periodic(struct clock_event_device *dev)
102 102
103 tick_periodic(cpu); 103 tick_periodic(cpu);
104 104
105 if (dev->mode != CLOCK_EVT_MODE_ONESHOT) 105 if (dev->state != CLOCK_EVT_STATE_ONESHOT)
106 return; 106 return;
107 for (;;) { 107 for (;;) {
108 /* 108 /*
@@ -140,7 +140,7 @@ void tick_setup_periodic(struct clock_event_device *dev, int broadcast)
140 140
141 if ((dev->features & CLOCK_EVT_FEAT_PERIODIC) && 141 if ((dev->features & CLOCK_EVT_FEAT_PERIODIC) &&
142 !tick_broadcast_oneshot_active()) { 142 !tick_broadcast_oneshot_active()) {
143 clockevents_set_mode(dev, CLOCK_EVT_MODE_PERIODIC); 143 clockevents_set_state(dev, CLOCK_EVT_STATE_PERIODIC);
144 } else { 144 } else {
145 unsigned long seq; 145 unsigned long seq;
146 ktime_t next; 146 ktime_t next;
@@ -150,7 +150,7 @@ void tick_setup_periodic(struct clock_event_device *dev, int broadcast)
150 next = tick_next_period; 150 next = tick_next_period;
151 } while (read_seqretry(&jiffies_lock, seq)); 151 } while (read_seqretry(&jiffies_lock, seq));
152 152
153 clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); 153 clockevents_set_state(dev, CLOCK_EVT_STATE_ONESHOT);
154 154
155 for (;;) { 155 for (;;) {
156 if (!clockevents_program_event(dev, next, false)) 156 if (!clockevents_program_event(dev, next, false))
@@ -365,6 +365,7 @@ void tick_shutdown(unsigned int *cpup)
365 * Prevent that the clock events layer tries to call 365 * Prevent that the clock events layer tries to call
366 * the set mode function! 366 * the set mode function!
367 */ 367 */
368 dev->state = CLOCK_EVT_STATE_DETACHED;
368 dev->mode = CLOCK_EVT_MODE_UNUSED; 369 dev->mode = CLOCK_EVT_MODE_UNUSED;
369 clockevents_exchange_device(dev, NULL); 370 clockevents_exchange_device(dev, NULL);
370 dev->event_handler = clockevents_handle_noop; 371 dev->event_handler = clockevents_handle_noop;
diff --git a/kernel/time/tick-oneshot.c b/kernel/time/tick-oneshot.c
index 7ce740e78e1b..67a64b1670bf 100644
--- a/kernel/time/tick-oneshot.c
+++ b/kernel/time/tick-oneshot.c
@@ -38,7 +38,7 @@ void tick_resume_oneshot(void)
38{ 38{
39 struct clock_event_device *dev = __this_cpu_read(tick_cpu_device.evtdev); 39 struct clock_event_device *dev = __this_cpu_read(tick_cpu_device.evtdev);
40 40
41 clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); 41 clockevents_set_state(dev, CLOCK_EVT_STATE_ONESHOT);
42 clockevents_program_event(dev, ktime_get(), true); 42 clockevents_program_event(dev, ktime_get(), true);
43} 43}
44 44
@@ -50,7 +50,7 @@ void tick_setup_oneshot(struct clock_event_device *newdev,
50 ktime_t next_event) 50 ktime_t next_event)
51{ 51{
52 newdev->event_handler = handler; 52 newdev->event_handler = handler;
53 clockevents_set_mode(newdev, CLOCK_EVT_MODE_ONESHOT); 53 clockevents_set_state(newdev, CLOCK_EVT_STATE_ONESHOT);
54 clockevents_program_event(newdev, next_event, true); 54 clockevents_program_event(newdev, next_event, true);
55} 55}
56 56
@@ -81,7 +81,7 @@ int tick_switch_to_oneshot(void (*handler)(struct clock_event_device *))
81 81
82 td->mode = TICKDEV_MODE_ONESHOT; 82 td->mode = TICKDEV_MODE_ONESHOT;
83 dev->event_handler = handler; 83 dev->event_handler = handler;
84 clockevents_set_mode(dev, CLOCK_EVT_MODE_ONESHOT); 84 clockevents_set_state(dev, CLOCK_EVT_STATE_ONESHOT);
85 tick_broadcast_switch_to_oneshot(); 85 tick_broadcast_switch_to_oneshot();
86 return 0; 86 return 0;
87} 87}
diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
index 2b3e9393034d..05aa5590106a 100644
--- a/kernel/time/timer_list.c
+++ b/kernel/time/timer_list.c
@@ -233,21 +233,21 @@ print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu)
233 print_name_offset(m, dev->set_mode); 233 print_name_offset(m, dev->set_mode);
234 SEQ_printf(m, "\n"); 234 SEQ_printf(m, "\n");
235 } else { 235 } else {
236 if (dev->set_mode_shutdown) { 236 if (dev->set_state_shutdown) {
237 SEQ_printf(m, " shutdown: "); 237 SEQ_printf(m, " shutdown: ");
238 print_name_offset(m, dev->set_mode_shutdown); 238 print_name_offset(m, dev->set_state_shutdown);
239 SEQ_printf(m, "\n"); 239 SEQ_printf(m, "\n");
240 } 240 }
241 241
242 if (dev->set_mode_periodic) { 242 if (dev->set_state_periodic) {
243 SEQ_printf(m, " periodic: "); 243 SEQ_printf(m, " periodic: ");
244 print_name_offset(m, dev->set_mode_periodic); 244 print_name_offset(m, dev->set_state_periodic);
245 SEQ_printf(m, "\n"); 245 SEQ_printf(m, "\n");
246 } 246 }
247 247
248 if (dev->set_mode_oneshot) { 248 if (dev->set_state_oneshot) {
249 SEQ_printf(m, " oneshot: "); 249 SEQ_printf(m, " oneshot: ");
250 print_name_offset(m, dev->set_mode_oneshot); 250 print_name_offset(m, dev->set_state_oneshot);
251 SEQ_printf(m, "\n"); 251 SEQ_printf(m, "\n");
252 } 252 }
253 253