summaryrefslogtreecommitdiff
path: root/drivers/cpuidle/governors/teo.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpuidle/governors/teo.c')
-rw-r--r--drivers/cpuidle/governors/teo.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/cpuidle/governors/teo.c b/drivers/cpuidle/governors/teo.c
index ac4bb27d69b0..e97ae84fa5a8 100644
--- a/drivers/cpuidle/governors/teo.c
+++ b/drivers/cpuidle/governors/teo.c
@@ -117,7 +117,7 @@ static DEFINE_PER_CPU(struct teo_cpu, teo_cpus);
static void teo_update(struct cpuidle_driver *drv, struct cpuidle_device *dev)
{
struct teo_cpu *cpu_data = per_cpu_ptr(&teo_cpus, dev->cpu);
- int i, idx_hit = 0, idx_timer = 0;
+ int i, idx_timer = 0, idx_duration = 0;
unsigned int hits, misses;
u64 measured_ns;
@@ -156,14 +156,15 @@ static void teo_update(struct cpuidle_driver *drv, struct cpuidle_device *dev)
* states matching the sleep length and the measured idle duration.
*/
for (i = 0; i < drv->state_count; i++) {
+ s64 target_residency_ns = drv->states[i].target_residency_ns;
unsigned int early_hits = cpu_data->states[i].early_hits;
cpu_data->states[i].early_hits -= early_hits >> DECAY_SHIFT;
- if (drv->states[i].target_residency_ns <= cpu_data->sleep_length_ns) {
+ if (target_residency_ns <= cpu_data->sleep_length_ns) {
idx_timer = i;
- if (drv->states[i].target_residency_ns <= measured_ns)
- idx_hit = i;
+ if (target_residency_ns <= measured_ns)
+ idx_duration = i;
}
}
@@ -181,11 +182,11 @@ static void teo_update(struct cpuidle_driver *drv, struct cpuidle_device *dev)
misses = cpu_data->states[idx_timer].misses;
misses -= misses >> DECAY_SHIFT;
- if (idx_timer == idx_hit) {
+ if (idx_timer == idx_duration) {
hits += PULSE;
} else {
misses += PULSE;
- cpu_data->states[idx_hit].early_hits += PULSE;
+ cpu_data->states[idx_duration].early_hits += PULSE;
}
cpu_data->states[idx_timer].misses = misses;