Patch "cpufreq: schedutil: move cached_raw_freq to struct sugov_policy" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
cpufreq: schedutil: move cached_raw_freq to struct sugov_policy
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cpufreq-schedutil-move-cached_raw_freq-to-struct-sugov_policy.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6c4f0fa643cb9e775dcc976e3db00d649468ff1dMon Sep 17 00:00:00 2001
From: Viresh Kumar <[email protected]>
Date: Thu, 2 Mar 2017 14:03:20 +0530
Subject: cpufreq: schedutil: move cached_raw_freq to struct sugov_policy
From: Viresh Kumar <[email protected]>
commit 6c4f0fa643cb9e775dcc976e3db00d649468ff1d upstream.
cached_raw_freq applies to the entire cpufreq policy and not individual CPUs. Apart from wasting per-cpu memory, it is actually wrong to keep it in struct sugov_cpu as we may end up comparing next_freq with a stale cached_raw_freq of a random CPU.
Move cached_raw_freq to struct sugov_policy.
--- kernel/sched/cpufreq_schedutil.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
kernel/sched/cpufreq_schedutil.c +4 -4
@@ -32,6 +32,7 @@ struct sugov_policy {u64 last_freq_update_time;s64 freq_update_delay_ns;unsigned int next_freq; +unsigned int cached_raw_freq;/* The next fields are only needed if fast switch cannot be used. */ struct irq_work irq_work;
@@ -46,7 +47,6 @@ struct sugov_cpu {struct update_util_data update_util;struct sugov_policy *sg_policy; -unsigned int cached_raw_freq;unsigned long iowait_boost;unsigned long iowait_boost_max;u64 last_update;
@@ -140,9 +140,9 @@ static unsigned int get_next_freq(struct freq = (freq + (freq >>2 )) * util / max; -if (freq == sg_cpu->cached_raw_freq && sg_policy->next_freq !=UINT_MAX ) +if (freq == sg_policy->cached_raw_freq && sg_policy->next_freq !=UINT_MAX )return sg_policy->next_freq; - sg_cpu->cached_raw_freq = freq; + sg_policy->cached_raw_freq = freq;return cpufreq_driver_resolve_freq (policy, freq); }
@@ -502,6 +502,7 @@ static int sugov_start(struct cpufreq_po sg_policy->next_freq =UINT_MAX ; sg_policy->work_in_progress = false; sg_policy->need_freq_update = false; + sg_policy->cached_raw_freq =0 ;for_each_cpu (cpu, policy->cpus) {struct sugov_cpu *sg_cpu = &per_cpu (sugov_cpu, cpu);
@@ -512,7 +513,6 @@ static int sugov_start(struct cpufreq_po sg_cpu->max =0 ; sg_cpu->flags =SCHED_CPUFREQ_RT ; sg_cpu->last_update =0 ; - sg_cpu->cached_raw_freq =0 ; sg_cpu->iowait_boost =0 ; sg_cpu->iowait_boost_max = policy->cpuinfo.max_freq; cpufreq_add_update_util_hook(cpu, &sg_cpu->update_util,
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/cpufreq-schedutil-move-cached_raw_freq-to-struct-sugov_policy.patch queue-4.9/cpufreq-schedutil-fix-per-cpu-structure-initialization-in-sugov_start.patch queue-4.9/cpufreq-cpufreq_register_driver-should-return-enodev-if-init-fails.patch