|
@@ -967,11 +967,9 @@ static void tick_nohz_switch_to_nohz(void)
|
|
|
if (!tick_nohz_enabled)
|
|
|
return;
|
|
|
|
|
|
- local_irq_disable();
|
|
|
- if (tick_switch_to_oneshot(tick_nohz_handler)) {
|
|
|
- local_irq_enable();
|
|
|
+ if (tick_switch_to_oneshot(tick_nohz_handler))
|
|
|
return;
|
|
|
- }
|
|
|
+
|
|
|
tick_nohz_active = 1;
|
|
|
ts->nohz_mode = NOHZ_MODE_LOWRES;
|
|
|
|
|
@@ -986,7 +984,6 @@ static void tick_nohz_switch_to_nohz(void)
|
|
|
hrtimer_forward_now(&ts->sched_timer, tick_period);
|
|
|
hrtimer_set_expires(&ts->sched_timer, next);
|
|
|
tick_program_event(next, 1);
|
|
|
- local_irq_enable();
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1171,7 +1168,7 @@ void tick_oneshot_notify(void)
|
|
|
* Called cyclic from the hrtimer softirq (driven by the timer
|
|
|
* softirq) allow_nohz signals, that we can switch into low-res nohz
|
|
|
* mode, because high resolution timers are disabled (either compile
|
|
|
- * or runtime).
|
|
|
+ * or runtime). Called with interrupts disabled.
|
|
|
*/
|
|
|
int tick_check_oneshot_change(int allow_nohz)
|
|
|
{
|