diff options
| author | Junjie Wu <junjiew@codeaurora.org> | 2015-09-23 12:00:33 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:03:33 -0700 |
| commit | 812323f5c5323070935cf0fea77bb36616d7cf5d (patch) | |
| tree | 004292735c03e20512332900aa5e0b564237ee09 /drivers/devfreq/devfreq.c | |
| parent | 57bb1f8bf982dd8d6884f8e78f52131be242e55d (diff) | |
cpufreq: interactive: Handle notification even if timer fires first
Scheduler provides different load number based on whether a
notification is pending. Under normal situation, it won't provide a
load that exceeds 100% busy time of current frequency. For migration,
the busy time can be huge if a heavy task just moved to the CPU.
This creates a race condition due to how governor handles
notification:
1) Scheduler sends notification for a big task
2) Governor timer runs, and gets a huge load, but fails to skip
hispeed_freq logic and all delays because it's not a notification
3) After receiving sched_get_cpus_busy(), scheduler thinks governor has
finished handling the notification and changes to provide normal load
that is capped to 100% of the CPU at current frequency.
4) Governor now starts handling notification, but gets a small load
that doesn't reflect real demand of the heavy task.
The migration notification is thus effectively lost. Fixing this by
making notification pending a per-cpu flag. If timer gets ahead of
notification handling, it will be run as if it's a notification.
Change-Id: Ie3d68edf85b822232a646c2694bec6928a2d7cd1
Signed-off-by: Junjie Wu <junjiew@codeaurora.org>
Diffstat (limited to 'drivers/devfreq/devfreq.c')
0 files changed, 0 insertions, 0 deletions
