Commit 82f66327 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

sched / idle: Move the default idle call code to a separate function

Move the code under the "use_default" label in cpuidle_idle_call()
into a separate (new) function.

This just allows the subsequent changes to be more stratightforward.
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
parent 5ebe6afa
...@@ -67,6 +67,18 @@ void __weak arch_cpu_idle(void) ...@@ -67,6 +67,18 @@ void __weak arch_cpu_idle(void)
local_irq_enable(); local_irq_enable();
} }
static void default_idle_call(void)
{
/*
* We can't use the cpuidle framework, let's use the default idle
* routine.
*/
if (current_clr_polling_and_test())
local_irq_enable();
else
arch_cpu_idle();
}
/** /**
* cpuidle_idle_call - the main idle function * cpuidle_idle_call - the main idle function
* *
...@@ -105,8 +117,10 @@ static void cpuidle_idle_call(void) ...@@ -105,8 +117,10 @@ static void cpuidle_idle_call(void)
*/ */
rcu_idle_enter(); rcu_idle_enter();
if (cpuidle_not_available(drv, dev)) if (cpuidle_not_available(drv, dev)) {
goto use_default; default_idle_call();
goto exit_idle;
}
/* /*
* Suspend-to-idle ("freeze") is a system state in which all user space * Suspend-to-idle ("freeze") is a system state in which all user space
...@@ -134,8 +148,10 @@ static void cpuidle_idle_call(void) ...@@ -134,8 +148,10 @@ static void cpuidle_idle_call(void)
next_state = cpuidle_select(drv, dev); next_state = cpuidle_select(drv, dev);
} }
/* Fall back to the default arch idle method on errors. */ /* Fall back to the default arch idle method on errors. */
if (next_state < 0) if (next_state < 0) {
goto use_default; default_idle_call();
goto exit_idle;
}
/* /*
* The idle task must be scheduled, it is pointless to * The idle task must be scheduled, it is pointless to
...@@ -162,8 +178,10 @@ static void cpuidle_idle_call(void) ...@@ -162,8 +178,10 @@ static void cpuidle_idle_call(void)
/* The cpu is no longer idle or about to enter idle. */ /* The cpu is no longer idle or about to enter idle. */
idle_set_state(this_rq(), NULL); idle_set_state(this_rq(), NULL);
if (entered_state == -EBUSY) if (entered_state == -EBUSY) {
goto use_default; default_idle_call();
goto exit_idle;
}
/* /*
* Give the governor an opportunity to reflect on the outcome * Give the governor an opportunity to reflect on the outcome
...@@ -182,19 +200,6 @@ static void cpuidle_idle_call(void) ...@@ -182,19 +200,6 @@ static void cpuidle_idle_call(void)
rcu_idle_exit(); rcu_idle_exit();
start_critical_timings(); start_critical_timings();
return;
use_default:
/*
* We can't use the cpuidle framework, let's use the default
* idle routine.
*/
if (current_clr_polling_and_test())
local_irq_enable();
else
arch_cpu_idle();
goto exit_idle;
} }
DEFINE_PER_CPU(bool, cpu_dead_idle); DEFINE_PER_CPU(bool, cpu_dead_idle);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment