cpufreq: interactive: fix boosting logic
authorTodd Poynor <toddpoynor@google.com>
Thu, 20 Dec 2012 00:06:48 +0000 (16:06 -0800)
committerJohn Stultz <john.stultz@linaro.org>
Tue, 16 Feb 2016 21:52:49 +0000 (13:52 -0800)
35a84de cpufreq: interactive: apply above_hispeed_delay to each step above hispeed

caused the speed choice logic to osciallate between boosting and not boosting.
Add back code to ensure speed does not drop below boost frequency while
boosting.

Change-Id: Id420068480fcc7f5c4989ff523e2a8d22e2f4db2
Signed-off-by: Todd Poynor <toddpoynor@google.com>
drivers/cpufreq/cpufreq_interactive.c

index 690be16aef8a04e289219429f853b127717a7ee3..f8e9ee9f7137b7518c355dcb874551f15916aa5e 100644 (file)
@@ -298,11 +298,18 @@ static void cpufreq_interactive_timer(unsigned long data)
        cpu_load = loadadjfreq / pcpu->target_freq;
        boosted = boost_val || now < boostpulse_endtime;
 
-       if ((cpu_load >= go_hispeed_load || boosted) &&
-           pcpu->target_freq < hispeed_freq)
-               new_freq = hispeed_freq;
-       else
+       if (cpu_load >= go_hispeed_load || boosted) {
+               if (pcpu->target_freq < hispeed_freq) {
+                       new_freq = hispeed_freq;
+               } else {
+                       new_freq = choose_freq(pcpu, loadadjfreq);
+
+                       if (new_freq < hispeed_freq)
+                               new_freq = hispeed_freq;
+               }
+       } else {
                new_freq = choose_freq(pcpu, loadadjfreq);
+       }
 
        if (pcpu->target_freq >= hispeed_freq &&
            new_freq > pcpu->target_freq &&