aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq
diff options
context:
space:
mode:
authorMinsung Kim <ms925.kim@samsung.com>2013-04-23 22:32:01 +0900
committerZiyann <jaraidaniel@gmail.com>2014-11-20 17:15:58 +0100
commitde128be17bf897a2aabdc8e746f854e8f9565200 (patch)
treef5ef18dcba7b006b974f260fdfa1629f838d03f8 /drivers/cpufreq
parentce636487d2453eec757b3e9a721641a3ab98787c (diff)
downloadkernel_samsung_tuna-de128be17bf897a2aabdc8e746f854e8f9565200.zip
kernel_samsung_tuna-de128be17bf897a2aabdc8e746f854e8f9565200.tar.gz
kernel_samsung_tuna-de128be17bf897a2aabdc8e746f854e8f9565200.tar.bz2
cpufreq: interactive: avoid underflow on active time calculation
Check for idle time delta less than elapsed time delta, avoid underflow computing active time. Change-Id: I3e4c6ef1ad794eec49ed379c0c50fa727fd6ad28 Signed-off-by: Minsung Kim <ms925.kim@samsung.com>
Diffstat (limited to 'drivers/cpufreq')
-rwxr-xr-xdrivers/cpufreq/cpufreq_interactive.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/cpufreq/cpufreq_interactive.c b/drivers/cpufreq/cpufreq_interactive.c
index e5c7836..053578a 100755
--- a/drivers/cpufreq/cpufreq_interactive.c
+++ b/drivers/cpufreq/cpufreq_interactive.c
@@ -280,7 +280,12 @@ static u64 update_load(int cpu)
now_idle = get_cpu_idle_time_us(cpu, &now);
delta_idle = (unsigned int)(now_idle - pcpu->time_in_idle);
delta_time = (unsigned int)(now - pcpu->time_in_idle_timestamp);
- active_time = delta_time - delta_idle;
+
+ if (delta_time <= delta_idle)
+ active_time = 0;
+ else
+ active_time = delta_time - delta_idle;
+
pcpu->cputime_speedadj += active_time * pcpu->policy->cur;
pcpu->time_in_idle = now_idle;