summaryrefslogtreecommitdiff
path: root/drivers/cpufreq/cpufreq_interactive.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq/cpufreq_interactive.c')
-rw-r--r--drivers/cpufreq/cpufreq_interactive.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/cpufreq/cpufreq_interactive.c b/drivers/cpufreq/cpufreq_interactive.c
index d8f62f402bf..38a874ed074 100644
--- a/drivers/cpufreq/cpufreq_interactive.c
+++ b/drivers/cpufreq/cpufreq_interactive.c
@@ -137,9 +137,14 @@ static void cpufreq_interactive_timer(unsigned long data)
if (delta_idle > delta_time)
cpu_load = 0;
- else
- cpu_load = 100 * (delta_time - delta_idle) / delta_time;
+ else {
+ unsigned long long load;
+
+ load = 100llu * (delta_time - delta_idle);
+ do_div(load, delta_time);
+ cpu_load = load;
+ }
delta_idle = (unsigned int) cputime64_sub(now_idle,
pcpu->freq_change_time_in_idle);
delta_time = (unsigned int) cputime64_sub(pcpu->timer_run_time,
@@ -147,9 +152,14 @@ static void cpufreq_interactive_timer(unsigned long data)
if (delta_idle > delta_time)
load_since_change = 0;
- else
- load_since_change =
- 100 * (delta_time - delta_idle) / delta_time;
+ else {
+ unsigned long long load;
+
+ load = 100llu * (delta_time - delta_idle);
+ do_div(load, delta_time);
+
+ load_since_change = load;
+ }
/*
* Choose greater of short-term load (since last idle timer