diff options
Diffstat (limited to 'kernel/time/tick-sched.c')
-rw-r--r-- | kernel/time/tick-sched.c | 15 |
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 | */ |
468 | void __tick_nohz_idle_enter(void) | 463 | void 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 | /** |