From 42fb4664c4b4b7daeb2a084763615cde1ab715c9 Mon Sep 17 00:00:00 2001 From: Chris Redpath Date: Mon, 17 Jun 2013 18:36:56 +0100 Subject: 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 (cherry picked from commit 6696986a932a28b17858279c5eb69f83d566d4de) Signed-off-by: Quentin Perret --- drivers/cpufreq/cpufreq_interactive.c | 7 +++---- 1 file 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; -- cgit v1.2.3