From 54052c3658daebb1dfe5c4a78dd8a1eeb34694e4 Mon Sep 17 00:00:00 2001 From: Syed Rameez Mustafa Date: Tue, 1 Nov 2016 17:34:01 -0700 Subject: sched/hmp: Remove capping when reporting load to the cpufreq governor Capping load when reporting to the governor was important prior to new scheduler guided frequency changes as intra-cluster migrations would sometimes lead to CPU loads well in excess of 100%. With the new top task approach however, load greater than 100% is no longer possible except for the same conditions that were previously exempted (i.e. inter-cluster migrations and frequency aggregation). Change-Id: I3e4f5e39ec9ae7eeaba9a567efd245a7aec1b7ad Signed-off-by: Syed Rameez Mustafa --- kernel/sched/hmp.c | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) (limited to 'kernel/sched') diff --git a/kernel/sched/hmp.c b/kernel/sched/hmp.c index 627da2346337..102fd2c27cbc 100644 --- a/kernel/sched/hmp.c +++ b/kernel/sched/hmp.c @@ -3296,7 +3296,7 @@ void sched_get_cpus_busy(struct sched_load *busy, u64 load[cpus], group_load[cpus]; u64 nload[cpus], ngload[cpus]; u64 pload[cpus]; - unsigned int cur_freq[cpus], max_freq[cpus]; + unsigned int max_freq[cpus]; int notifier_sent = 0; int early_detection[cpus]; int cpu, i = 0; @@ -3336,7 +3336,6 @@ void sched_get_cpus_busy(struct sched_load *busy, update_task_ravg(rq->curr, rq, TASK_UPDATE, sched_ktime_clock(), 0); - cur_freq[i] = cpu_cycles_to_freq(rq->cc.cycles, rq->cc.time); account_load_subtractions(rq); load[i] = rq->old_busy_time = rq->prev_runnable_sum; @@ -3360,7 +3359,6 @@ void sched_get_cpus_busy(struct sched_load *busy, rq->cluster->notifier_sent = 0; } early_detection[i] = (rq->ed_task != NULL); - cur_freq[i] = cpu_cur_freq(cpu); max_freq[i] = cpu_max_freq(cpu); i++; } @@ -3433,33 +3431,11 @@ skip_early: goto exit_early; } - /* - * When the load aggregation is controlled by - * sched_freq_aggregate_threshold, allow reporting loads - * greater than 100 @ Fcur to ramp up the frequency - * faster. - */ - if (notifier_sent || (aggregate_load && - sched_freq_aggregate_threshold)) { - load[i] = scale_load_to_freq(load[i], max_freq[i], - cpu_max_possible_freq(cpu)); - nload[i] = scale_load_to_freq(nload[i], max_freq[i], - cpu_max_possible_freq(cpu)); - } else { - load[i] = scale_load_to_freq(load[i], max_freq[i], - cur_freq[i]); - nload[i] = scale_load_to_freq(nload[i], max_freq[i], - cur_freq[i]); - if (load[i] > window_size) - load[i] = window_size; - if (nload[i] > window_size) - nload[i] = window_size; - - load[i] = scale_load_to_freq(load[i], cur_freq[i], - cpu_max_possible_freq(cpu)); - nload[i] = scale_load_to_freq(nload[i], cur_freq[i], - cpu_max_possible_freq(cpu)); - } + load[i] = scale_load_to_freq(load[i], max_freq[i], + cpu_max_possible_freq(cpu)); + nload[i] = scale_load_to_freq(nload[i], max_freq[i], + cpu_max_possible_freq(cpu)); + pload[i] = scale_load_to_freq(pload[i], max_freq[i], rq->cluster->max_possible_freq); -- cgit v1.2.3