aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Redpath <chris.redpath@arm.com>2013-06-17 18:36:56 +0100
committerAmit Pundir <amit.pundir@linaro.org>2017-08-23 18:53:40 +0530
commit42fb4664c4b4b7daeb2a084763615cde1ab715c9 (patch)
tree3f7d86115fcdb1362c4e004653ee3bdb7010acb9
parent6f9db5659f30924e904606d84b45d5ed1fc71e58 (diff)
downloadlinaro-android-42fb4664c4b4b7daeb2a084763615cde1ab715c9.tar.gz
ANDROID: cpufreq: interactive governor drops bits in time calculation
Keep time calculation in 64-bit throughout. If we have long times between idle calculations this can result in deltas > 32 bits which causes incorrect load percentage calculations and selecting the wrong frequencies if we truncate here. Change-Id: Ia9e0b8f14a1472001a922f7accb53e6a0da4d0a0 Signed-off-by: Chris Redpath <chris.redpath@arm.com> (cherry picked from commit 6696986a932a28b17858279c5eb69f83d566d4de) Signed-off-by: Quentin Perret <quentin.perret@arm.com>
-rw-r--r--drivers/cpufreq/cpufreq_interactive.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/cpufreq/cpufreq_interactive.c b/drivers/cpufreq/cpufreq_interactive.c
index 8940933c2e96..f6ad9f27dbe0 100644
--- a/drivers/cpufreq/cpufreq_interactive.c
+++ b/drivers/cpufreq/cpufreq_interactive.c
@@ -339,12 +339,11 @@ static unsigned int choose_freq(struct interactive_cpu *icpu,
static u64 update_load(struct interactive_cpu *icpu, int cpu)
{
struct interactive_tunables *tunables = icpu->ipolicy->tunables;
- unsigned int delta_idle, delta_time;
- u64 now_idle, now, active_time;
+ u64 now_idle, now, active_time, delta_idle, delta_time;
now_idle = get_cpu_idle_time(cpu, &now, tunables->io_is_busy);
- delta_idle = (unsigned int)(now_idle - icpu->time_in_idle);
- delta_time = (unsigned int)(now - icpu->time_in_idle_timestamp);
+ delta_idle = (now_idle - icpu->time_in_idle);
+ delta_time = (now - icpu->time_in_idle_timestamp);
if (delta_time <= delta_idle)
active_time = 0;