|
@@ -531,7 +531,6 @@ void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
|
|
|
int was_periodic = bc->mode == CLOCK_EVT_MODE_PERIODIC;
|
|
|
|
|
|
bc->event_handler = tick_handle_oneshot_broadcast;
|
|
|
- clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT);
|
|
|
|
|
|
/* Take the do_timer update */
|
|
|
tick_do_timer_cpu = cpu;
|
|
@@ -549,6 +548,7 @@ void tick_broadcast_setup_oneshot(struct clock_event_device *bc)
|
|
|
to_cpumask(tmpmask));
|
|
|
|
|
|
if (was_periodic && !cpumask_empty(to_cpumask(tmpmask))) {
|
|
|
+ clockevents_set_mode(bc, CLOCK_EVT_MODE_ONESHOT);
|
|
|
tick_broadcast_init_next_event(to_cpumask(tmpmask),
|
|
|
tick_next_period);
|
|
|
tick_broadcast_set_event(tick_next_period, 1);
|
|
@@ -577,15 +577,10 @@ void tick_broadcast_switch_to_oneshot(void)
|
|
|
raw_spin_lock_irqsave(&tick_broadcast_lock, flags);
|
|
|
|
|
|
tick_broadcast_device.mode = TICKDEV_MODE_ONESHOT;
|
|
|
-
|
|
|
- if (cpumask_empty(tick_get_broadcast_mask()))
|
|
|
- goto end;
|
|
|
-
|
|
|
bc = tick_broadcast_device.evtdev;
|
|
|
if (bc)
|
|
|
tick_broadcast_setup_oneshot(bc);
|
|
|
|
|
|
-end:
|
|
|
raw_spin_unlock_irqrestore(&tick_broadcast_lock, flags);
|
|
|
}
|
|
|
|