|
@@ -46,6 +46,12 @@ static int __init powersave_off(char *arg)
|
|
}
|
|
}
|
|
__setup("powersave=off", powersave_off);
|
|
__setup("powersave=off", powersave_off);
|
|
|
|
|
|
|
|
+#if defined(CONFIG_PPC_PSERIES) && defined(CONFIG_TRACEPOINTS)
|
|
|
|
+static const bool idle_uses_rcu = 1;
|
|
|
|
+#else
|
|
|
|
+static const bool idle_uses_rcu;
|
|
|
|
+#endif
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* The body of the idle task.
|
|
* The body of the idle task.
|
|
*/
|
|
*/
|
|
@@ -56,7 +62,10 @@ void cpu_idle(void)
|
|
|
|
|
|
set_thread_flag(TIF_POLLING_NRFLAG);
|
|
set_thread_flag(TIF_POLLING_NRFLAG);
|
|
while (1) {
|
|
while (1) {
|
|
- tick_nohz_idle_enter_norcu();
|
|
|
|
|
|
+ if (idle_uses_rcu)
|
|
|
|
+ tick_nohz_idle_enter();
|
|
|
|
+ else
|
|
|
|
+ tick_nohz_idle_enter_norcu();
|
|
while (!need_resched() && !cpu_should_die()) {
|
|
while (!need_resched() && !cpu_should_die()) {
|
|
ppc64_runlatch_off();
|
|
ppc64_runlatch_off();
|
|
|
|
|
|
@@ -93,7 +102,10 @@ void cpu_idle(void)
|
|
|
|
|
|
HMT_medium();
|
|
HMT_medium();
|
|
ppc64_runlatch_on();
|
|
ppc64_runlatch_on();
|
|
- tick_nohz_idle_exit_norcu();
|
|
|
|
|
|
+ if (idle_uses_rcu)
|
|
|
|
+ tick_nohz_idle_exit();
|
|
|
|
+ else
|
|
|
|
+ tick_nohz_idle_exit_norcu();
|
|
preempt_enable_no_resched();
|
|
preempt_enable_no_resched();
|
|
if (cpu_should_die())
|
|
if (cpu_should_die())
|
|
cpu_die();
|
|
cpu_die();
|