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

Commit 05d2ca24 authored by Saravana Kannan's avatar Saravana Kannan Committed by Rohit Gupta
Browse files

cpufreq: schedutil: Ignore CPU load older than WALT window size



The old code used to ignore CPU load older than 1 tick. Since the WALT
window size can be more than 1 tick (and is configurable), this can cause
an incorrect frequency drop in the middle of a WALT window. Use WALT window
size to ignore CPU load instead.

Change-Id: If42420f595ba9722866174c2cda8b6c2fdf34f92
Signed-off-by: default avatarSaravana Kannan <skannan@codeaurora.org>
Signed-off-by: default avatarRohit Gupta <rohgup@codeaurora.org>
parent e5689e1c
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ struct sugov_cpu {
};

static DEFINE_PER_CPU(struct sugov_cpu, sugov_cpu);
static unsigned int stale_ns;

/************************ Governor internals ***********************/

@@ -299,6 +300,7 @@ static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu, u64 time)
{
	struct sugov_policy *sg_policy = sg_cpu->sg_policy;
	struct cpufreq_policy *policy = sg_policy->policy;
	u64 last_freq_update_time = sg_policy->last_freq_update_time;
	unsigned long util = 0, max = 1;
	unsigned int j;

@@ -314,8 +316,8 @@ static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu, u64 time)
		 * enough, don't take the CPU into account as it probably is
		 * idle now (and clear iowait_boost for it).
		 */
		delta_ns = time - j_sg_cpu->last_update;
		if (delta_ns > TICK_NSEC) {
		delta_ns = last_freq_update_time - j_sg_cpu->last_update;
		if (delta_ns > stale_ns) {
			j_sg_cpu->iowait_boost = 0;
			j_sg_cpu->iowait_boost_pending = false;
			continue;
@@ -592,6 +594,7 @@ static int sugov_init(struct cpufreq_policy *policy)

	policy->governor_data = sg_policy;
	sg_policy->tunables = tunables;
	stale_ns = sched_ravg_window + (sched_ravg_window >> 3);

	ret = kobject_init_and_add(&tunables->attr_set.kobj, &sugov_tunables_ktype,
				   get_governor_parent_kobj(policy), "%s",