diff options
author | Steve Muckle <steve.muckle@linaro.org> | 2016-08-26 11:40:47 -0700 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2016-09-01 00:32:57 +0200 |
commit | 8314bc83f6a33958a033955e9bdc48e8dd4d5fb0 (patch) | |
tree | 123b8124e4e740e85152bed5602788b06f6a89ad /kernel/sched/cpufreq_schedutil.c | |
parent | 12bde33dbb3eadd60343a8a71c39766073c1d752 (diff) | |
download | linux-stable-8314bc83f6a33958a033955e9bdc48e8dd4d5fb0.tar.gz linux-stable-8314bc83f6a33958a033955e9bdc48e8dd4d5fb0.tar.bz2 linux-stable-8314bc83f6a33958a033955e9bdc48e8dd4d5fb0.zip |
cpufreq / sched: ignore SMT when determining max cpu capacity
PELT does not consider SMT when scaling its utilization values via
arch_scale_cpu_capacity(). The value in rq->cpu_capacity_orig does
take SMT into consideration though and therefore may be smaller than
the utilization reported by PELT.
On an Intel i7-3630QM for example rq->cpu_capacity_orig is 589 but
util_avg scales up to 1024. This means that a 50% utilized CPU will show
up in schedutil as ~86% busy.
Fix this by using the same CPU scaling value in schedutil as that which
is used by PELT.
Signed-off-by: Steve Muckle <smuckle@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'kernel/sched/cpufreq_schedutil.c')
-rw-r--r-- | kernel/sched/cpufreq_schedutil.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index 60d985f4dc47..cb8a77b1ef1b 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -147,7 +147,9 @@ static unsigned int get_next_freq(struct sugov_cpu *sg_cpu, unsigned long util, static void sugov_get_util(unsigned long *util, unsigned long *max) { struct rq *rq = this_rq(); - unsigned long cfs_max = rq->cpu_capacity_orig; + unsigned long cfs_max; + + cfs_max = arch_scale_cpu_capacity(NULL, smp_processor_id()); *util = min(rq->cfs.avg.util_avg, cfs_max); *max = cfs_max; |