aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/time/tick-sched.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/time/tick-sched.c')
-rw-r--r--kernel/time/tick-sched.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index c76aefe764b0..0ec8b832ab6b 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -454,21 +454,20 @@ out:
454 * When the next event is more than a tick into the future, stop the idle tick 454 * When the next event is more than a tick into the future, stop the idle tick
455 * Called when we start the idle loop. 455 * Called when we start the idle loop.
456 * 456 *
457 * If no use of RCU is made in the idle loop between 457 * The arch is responsible of calling:
458 * tick_nohz_idle_enter() and tick_nohz_idle_exit() calls, then
459 * tick_nohz_idle_enter_norcu() should be called instead and the arch
460 * doesn't need to call rcu_idle_enter() and rcu_idle_exit() explicitly.
461 *
462 * Otherwise the arch is responsible of calling:
463 * 458 *
464 * - rcu_idle_enter() after its last use of RCU before the CPU is put 459 * - rcu_idle_enter() after its last use of RCU before the CPU is put
465 * to sleep. 460 * to sleep.
466 * - rcu_idle_exit() before the first use of RCU after the CPU is woken up. 461 * - rcu_idle_exit() before the first use of RCU after the CPU is woken up.
467 */ 462 */
468void __tick_nohz_idle_enter(void) 463void tick_nohz_idle_enter(void)
469{ 464{
470 struct tick_sched *ts; 465 struct tick_sched *ts;
471 466
467 WARN_ON_ONCE(irqs_disabled());
468
469 local_irq_disable();
470
472 ts = &__get_cpu_var(tick_cpu_sched); 471 ts = &__get_cpu_var(tick_cpu_sched);
473 /* 472 /*
474 * set ts->inidle unconditionally. even if the system did not 473 * set ts->inidle unconditionally. even if the system did not
@@ -477,6 +476,8 @@ void __tick_nohz_idle_enter(void)
477 */ 476 */
478 ts->inidle = 1; 477 ts->inidle = 1;
479 tick_nohz_stop_sched_tick(ts); 478 tick_nohz_stop_sched_tick(ts);
479
480 local_irq_enable();
480} 481}
481 482
482/** 483/**