From f5e5ad4292c6ebe1d57221413d8215d024c6c401 Mon Sep 17 00:00:00 2001 From: Todd Poynor Date: Wed, 19 Dec 2012 16:06:48 -0800 Subject: [PATCH] cpufreq: interactive: fix boosting logic 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 --- drivers/cpufreq/cpufreq_interactive.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/cpufreq/cpufreq_interactive.c b/drivers/cpufreq/cpufreq_interactive.c index 690be16aef8a..f8e9ee9f7137 100644 --- a/drivers/cpufreq/cpufreq_interactive.c +++ b/drivers/cpufreq/cpufreq_interactive.c @@ -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 && -- 2.34.1