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: Saravana Kannan <skannan@codeaurora.org>
Signed-off-by: Rohit Gupta <rohgup@codeaurora.org>
tirimbino
Saravana Kannan 8 years ago committed by Rohit Gupta
parent e5689e1c30
commit 05d2ca2420
  1. 7
      kernel/sched/cpufreq_schedutil.c

@ -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",

Loading…
Cancel
Save