diff options
author | Chris Redpath <chris.redpath@arm.com> | 2013-06-17 18:36:56 +0100 |
---|---|---|
committer | Jon Medhurst <tixy@linaro.org> | 2013-07-18 13:08:23 +0100 |
commit | b187f1aa8f098347ad37e3973838a8ffe120fc1c (patch) | |
tree | a70eb8a43560a5a2b23bfc4d88e6ceb1e86c9cd3 | |
parent | 6fd71c6c6402bd229716ce274716420ff0117e28 (diff) |
cpufreq: interactive governor drops bits in time calculationtracking-interactive-gov-updates-llct-20130904.0tracking-interactive-gov-updates-llct-20130829.0tracking-interactive-gov-updates-llct-20130820.0tracking-interactive-gov-updates-llct-20130819.2tracking-interactive-gov-updates-llct-20130819.1tracking-interactive-gov-updates-llct-20130819.0tracking-interactive-gov-updates-llct-20130812.0tracking-interactive-gov-updates-llct-20130807.0tracking-interactive-gov-updates-llct-20130801.0tracking-interactive-gov-updates-llct-20130723.0tracking-interactive-gov-updates-llct-20130718.0
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.
Signed-off-by: Chris Redpath <chris.redpath@arm.com>
-rw-r--r-- | drivers/cpufreq/cpufreq_interactive.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/cpufreq/cpufreq_interactive.c b/drivers/cpufreq/cpufreq_interactive.c index 7f1782ade53c..a494fbd7dbe8 100644 --- a/drivers/cpufreq/cpufreq_interactive.c +++ b/drivers/cpufreq/cpufreq_interactive.c @@ -316,13 +316,13 @@ static u64 update_load(int cpu) pcpu->policy->governor_data; u64 now; u64 now_idle; - unsigned int delta_idle; - unsigned int delta_time; + u64 delta_idle; + u64 delta_time; u64 active_time; now_idle = get_cpu_idle_time(cpu, &now, tunables->io_is_busy); - delta_idle = (unsigned int)(now_idle - pcpu->time_in_idle); - delta_time = (unsigned int)(now - pcpu->time_in_idle_timestamp); + delta_idle = (now_idle - pcpu->time_in_idle); + delta_time = (now - pcpu->time_in_idle_timestamp); if (delta_time <= delta_idle) active_time = 0; |