Skip to content

Commit

Permalink
cpufreq: schedutil: Ignore CPU load older than WALT window size
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Saravana Kannan authored and Rohit Gupta committed Dec 29, 2017
1 parent e5689e1 commit 05d2ca2
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions kernel/sched/cpufreq_schedutil.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ struct sugov_cpu {
};

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

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

Expand Down Expand Up @@ -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;

Expand All @@ -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;
Expand Down Expand Up @@ -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",
Expand Down

0 comments on commit 05d2ca2

Please sign in to comment.