Skip to content

Commit 4ffc773

Browse files
Joonwoo Parkpundiramit
authored andcommitted
cpufreq: sched: update capacity request upon tick always
At present, sched_freq_tick() skips updating of capacity update when current frequency is fmax. This can cause incorrect frequency drop when a CPU bound task goes into sleep for example : 1) A task (A) enqueues onto CPU 0 and executes for long time. 2) A new task (B) which has low task demand enqueues onto CPU 1 and executes long so becomes a CPU bound task. 3) Both CPU 0 and 1 gets scheduler tick but skip sched_freq_tick() since current frequency is fmax. 4) Task (A) sleeps and lower the CPU 0's capacity request. 5) Because task (B) voted CPU capacity at step 2 with low demand and skipped to request afterwards, cluster frequency for both CPU 0 and 1 drops to match capacity voted by CPU 1 at step 2 even though task (B) on CPU 1 requires max capacity. Fix such incorrectness by not skipping CPU capacity voting at tick path. Change-Id: Ieb46af1ac96ffce7a5532c58c7f07bf1ada06b86 Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org> Signed-off-by: Vikram Mulukutla <markivx@codeaurora.org>
1 parent 2067342 commit 4ffc773

1 file changed

Lines changed: 0 additions & 7 deletions

File tree

kernel/sched/core.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3025,16 +3025,9 @@ static void sched_freq_tick_walt(int cpu)
30253025

30263026
static void sched_freq_tick(int cpu)
30273027
{
3028-
unsigned long capacity_orig, capacity_curr;
3029-
30303028
if (!sched_freq())
30313029
return;
30323030

3033-
capacity_orig = capacity_orig_of(cpu);
3034-
capacity_curr = capacity_curr_of(cpu);
3035-
if (capacity_curr == capacity_orig)
3036-
return;
3037-
30383031
_sched_freq_tick(cpu);
30393032
}
30403033
#else

0 commit comments

Comments
 (0)