summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorOlav Haugan <ohaugan@codeaurora.org>2014-12-23 15:43:51 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:01:28 -0700
commitf916962758fdca9093d7f4d2268aeb5ce3297373 (patch)
treed10a54761df49fb1cc90b0abfbb6f7b12c131216 /kernel
parent61add5eb963fbfe57c9c46e182295f2034cf2ad3 (diff)
sched: Fix overflow in max possible capacity calculation
The max possible capacity calculation might overflow given large enough max possible frequency and capacity. Fix potential for overflow. Change-Id: Ie9345bc657988845aeb450d922052550cca48a5f Signed-off-by: Olav Haugan <ohaugan@codeaurora.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/core.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 0ae0d5f71a51..76aa44c0bcfe 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -2461,10 +2461,12 @@ static int cpufreq_notifier_policy(struct notifier_block *nb,
pre_big_small_task_count_change(cpu_possible_mask);
for_each_cpu(i, cpus) {
struct rq *rq = cpu_rq(i);
+ u64 max_possible_capacity;
rq->capacity = compute_capacity(i);
- rq->max_possible_capacity = rq->capacity *
- rq->max_possible_freq / rq->max_freq;
+ max_possible_capacity = div_u64(((u64) rq->capacity) *
+ rq->max_possible_freq, rq->max_freq);
+ rq->max_possible_capacity = (int) max_possible_capacity;
rq->load_scale_factor = compute_load_scale_factor(i);
}