diff options
Diffstat (limited to 'arch/powerpc/kernel/idle.c')
-rw-r--r-- | arch/powerpc/kernel/idle.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c index 39a2baa6ad58..9c3cd490b1bd 100644 --- a/arch/powerpc/kernel/idle.c +++ b/arch/powerpc/kernel/idle.c | |||
@@ -46,6 +46,12 @@ static int __init powersave_off(char *arg) | |||
46 | } | 46 | } |
47 | __setup("powersave=off", powersave_off); | 47 | __setup("powersave=off", powersave_off); |
48 | 48 | ||
49 | #if defined(CONFIG_PPC_PSERIES) && defined(CONFIG_TRACEPOINTS) | ||
50 | static const bool idle_uses_rcu = 1; | ||
51 | #else | ||
52 | static const bool idle_uses_rcu; | ||
53 | #endif | ||
54 | |||
49 | /* | 55 | /* |
50 | * The body of the idle task. | 56 | * The body of the idle task. |
51 | */ | 57 | */ |
@@ -56,7 +62,10 @@ void cpu_idle(void) | |||
56 | 62 | ||
57 | set_thread_flag(TIF_POLLING_NRFLAG); | 63 | set_thread_flag(TIF_POLLING_NRFLAG); |
58 | while (1) { | 64 | while (1) { |
59 | tick_nohz_stop_sched_tick(1); | 65 | tick_nohz_idle_enter(); |
66 | if (!idle_uses_rcu) | ||
67 | rcu_idle_enter(); | ||
68 | |||
60 | while (!need_resched() && !cpu_should_die()) { | 69 | while (!need_resched() && !cpu_should_die()) { |
61 | ppc64_runlatch_off(); | 70 | ppc64_runlatch_off(); |
62 | 71 | ||
@@ -93,7 +102,9 @@ void cpu_idle(void) | |||
93 | 102 | ||
94 | HMT_medium(); | 103 | HMT_medium(); |
95 | ppc64_runlatch_on(); | 104 | ppc64_runlatch_on(); |
96 | tick_nohz_restart_sched_tick(); | 105 | if (!idle_uses_rcu) |
106 | rcu_idle_exit(); | ||
107 | tick_nohz_idle_exit(); | ||
97 | preempt_enable_no_resched(); | 108 | preempt_enable_no_resched(); |
98 | if (cpu_should_die()) | 109 | if (cpu_should_die()) |
99 | cpu_die(); | 110 | cpu_die(); |