diff options
| author | myfluxi <linflux@arcor.de> | 2014-07-19 00:30:20 +0200 |
|---|---|---|
| committer | myfluxi <linflux@arcor.de> | 2015-04-26 14:31:00 +0200 |
| commit | c22bb66c16d3150aa56cb7f5c54f6e42c76701f5 (patch) | |
| tree | 3b0c1e0ef42f706900b1d1bbbca3a775bd368246 | |
| parent | 0e5985ce7fb2589863e2164a47fa68f884026e37 (diff) | |
cpufreq: interactive: Honor boosted state in several timer calculations
Change-Id: If03da12c52d89a5293e32ac918db44a00ef34884
| -rw-r--r-- | drivers/cpufreq/cpufreq_interactive.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/cpufreq/cpufreq_interactive.c b/drivers/cpufreq/cpufreq_interactive.c index fc05bf96f25..d39832f0732 100644 --- a/drivers/cpufreq/cpufreq_interactive.c +++ b/drivers/cpufreq/cpufreq_interactive.c @@ -140,6 +140,7 @@ static void cpufreq_interactive_timer_resched(unsigned long cpu) struct cpufreq_interactive_cpuinfo *pcpu = &per_cpu(cpuinfo, cpu); u64 expires; unsigned long flags; + u64 now = ktime_to_us(ktime_get()); spin_lock_irqsave(&pcpu->load_lock, flags); pcpu->time_in_idle = @@ -152,7 +153,10 @@ static void cpufreq_interactive_timer_resched(unsigned long cpu) pcpu->cpu_timer.expires = expires; add_timer_on(&pcpu->cpu_timer, cpu); - if (timer_slack_val >= 0 && pcpu->target_freq > pcpu->policy->min) { + if (timer_slack_val >= 0 && + (pcpu->target_freq > pcpu->policy->min || + (pcpu->target_freq == pcpu->policy->min && + now < boostpulse_endtime))) { expires += usecs_to_jiffies(timer_slack_val); del_timer(&pcpu->cpu_slack_timer); pcpu->cpu_slack_timer.expires = expires; @@ -171,11 +175,15 @@ static void cpufreq_interactive_timer_start(int cpu) struct cpufreq_interactive_cpuinfo *pcpu = &per_cpu(cpuinfo, cpu); u64 expires = round_to_nw_start(pcpu->last_evaluated_jiffy); unsigned long flags; + u64 now = ktime_to_us(ktime_get()); spin_lock_irqsave(&pcpu->load_lock, flags); pcpu->cpu_timer.expires = expires; add_timer_on(&pcpu->cpu_timer, cpu); - if (timer_slack_val >= 0 && pcpu->target_freq > pcpu->policy->min) { + if (timer_slack_val >= 0 && + (pcpu->target_freq > pcpu->policy->min || + (pcpu->target_freq == pcpu->policy->min && + now < boostpulse_endtime))) { expires += usecs_to_jiffies(timer_slack_val); pcpu->cpu_slack_timer.expires = expires; add_timer_on(&pcpu->cpu_slack_timer, cpu); @@ -497,9 +505,12 @@ static void cpufreq_interactive_idle_start(void) return; } + now = ktime_to_us(ktime_get()); pending = timer_pending(&pcpu->cpu_timer); - if (pcpu->target_freq != pcpu->policy->min) { + if (pcpu->target_freq > pcpu->policy->min || + (pcpu->target_freq == pcpu->policy->min && + now < boostpulse_endtime)) { /* * Entering idle while not at lowest speed. On some * platforms this can hold the other CPU(s) at that speed |
