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

Commit 342c8ec5 authored by Kazuki H's avatar Kazuki H Committed by Pranav Vashi
Browse files

sched/idle: Enter wfi state instead of polling during active migration



WFI's wakeup latency is low enough, use that instead of polling and
burning power.

Change-Id: Iee1c1cdf515224267925037a859c6a74fc61abb7
Signed-off-by: default avatarKazuki H <kazukih0205@gmail.com>
Signed-off-by: default avatarAlexander Winkowski <dereference23@outlook.com>
Signed-off-by: default avatarPranav Vashi <neobuddy89@gmail.com>
parent ab3b8b1b
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@
#elif defined(CONFIG_COMMON_CLK_MSM)
#include "../../drivers/clk/msm/clock.h"
#endif /* CONFIG_COMMON_CLK */
#include "../../kernel/sched/sched.h"
#define CREATE_TRACE_POINTS
#include <trace/events/trace_msm_low_power.h>

@@ -640,7 +641,8 @@ static int cpu_power_select(struct cpuidle_device *dev,
	struct power_params *pwr_params;
	uint64_t bias_time = 0;

	if ((sleep_disabled && !cpu_isolated(dev->cpu)) || sleep_us < 0)
	if ((sleep_disabled && !cpu_isolated(dev->cpu)) ||
	    is_reserved(dev->cpu) || sleep_us < 0)
		return best_level;

	idx_restrict = cpu->nlevels + 1;
+2 −4
Original line number Diff line number Diff line
@@ -66,8 +66,7 @@ static noinline int __cpuidle cpu_idle_poll(void)
	local_irq_enable();
	stop_critical_timings();
	while (!tif_need_resched() &&
		(cpu_idle_force_poll || tick_check_broadcast_expired() ||
		is_reserved(smp_processor_id())))
		(cpu_idle_force_poll || tick_check_broadcast_expired()))
		cpu_relax();
	start_critical_timings();
	trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id());
@@ -263,8 +262,7 @@ static void do_idle(void)
		 * broadcast device expired for us, we don't want to go deep
		 * idle as we know that the IPI is going to arrive right away.
		 */
		if (cpu_idle_force_poll || tick_check_broadcast_expired() ||
				is_reserved(smp_processor_id())) {
		if (cpu_idle_force_poll || tick_check_broadcast_expired()) {
			tick_nohz_idle_restart_tick();
			cpu_idle_poll();
		} else {