summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarshitha Sai Neelati <hsaine@codeaurora.org>2019-09-04 17:32:28 +0530
committerHarshitha Sai Neelati <hsaine@codeaurora.org>2019-10-23 17:21:16 +0530
commit04024ee16495c8cf184c444a0edaf6aa68fda357 (patch)
treeac84d3788322b9d63d67a8ae6656458b49322337
parentc65b9585249986588b205fbed6eda20924423e72 (diff)
adreno_tz: Correct acc_relative_busy calculation
Current acc_relative_busy calculation is causing integer overflow in 32 bit system. "stats->busy_time * stats->current_frequency" results in a value which is beyond the 32 bit range. Typecasting the value to u64 to avoid overflow. Change-Id: Id97da02bef608787ceb7c9751bbfc203af56deb1 Signed-off-by: Harshitha Sai Neelati <hsaine@codeaurora.org>
-rw-r--r--drivers/devfreq/governor_msm_adreno_tz.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/devfreq/governor_msm_adreno_tz.c b/drivers/devfreq/governor_msm_adreno_tz.c
index f31089d63e0c..4c010654204c 100644
--- a/drivers/devfreq/governor_msm_adreno_tz.c
+++ b/drivers/devfreq/governor_msm_adreno_tz.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2010-2017, 2019 The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -150,6 +150,8 @@ void compute_work_load(struct devfreq_dev_status *stats,
struct devfreq_msm_adreno_tz_data *priv,
struct devfreq *devfreq)
{
+ u64 busy;
+
spin_lock(&sample_lock);
/*
* Keep collecting the stats till the client
@@ -157,8 +159,10 @@ void compute_work_load(struct devfreq_dev_status *stats,
* is done when the entry is read
*/
acc_total += stats->total_time;
- acc_relative_busy += (stats->busy_time * stats->current_frequency) /
- devfreq->profile->freq_table[0];
+ busy = (u64)stats->busy_time * stats->current_frequency;
+ do_div(busy, devfreq->profile->freq_table[0]);
+ acc_relative_busy += busy;
+
spin_unlock(&sample_lock);
}