Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+24 −19
Original line number Original line Diff line number Diff line
@@ -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)
	 */
	 */
	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)
		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)
	/* 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)


	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);