cpufreq: interactive: don't skip waking up speedchange_task if target_freq > policy...
authorMinsung Kim <ms925.kim@samsung.com>
Sat, 29 Nov 2014 12:43:53 +0000 (21:43 +0900)
committerDanny Wood <danwood76@gmail.com>
Sun, 31 Mar 2019 09:24:16 +0000 (10:24 +0100)
When __cpufreq_driver_target() in speedchange_task failed for some reason, the
policy->cur could be lower than the target_freq. The governor misses to change
the target_freq if the target_freq is equal to the next_freq at the next sample
time.

Added a check to prevent the CPU to stay at the speed that is lower than the
target_freq for long duration.

Change-Id: Ibfdcd193b8280390b8f8374a63218aa31267f310
Signed-off-by: Minsung Kim <ms925.kim@samsung.com>
drivers/cpufreq/cpufreq_interactive.c

index dbf42df7e15cf23efcbe4eecc2a9c9258652b35d..3e7d5394c42393cbc84e65281d24605e40c287ed 100644 (file)
@@ -461,7 +461,8 @@ static void cpufreq_interactive_timer(unsigned long data)
                pcpu->floor_validate_time = now;
        }
 
-       if (pcpu->target_freq == new_freq) {
+       if (pcpu->target_freq == new_freq &&
+                       pcpu->target_freq <= pcpu->policy->cur) {
                trace_cpufreq_interactive_already(
                        data, cpu_load, pcpu->target_freq,
                        pcpu->policy->cur, new_freq);