summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorCon Kolivas <kernel@kolivas.org>2016-10-28 08:50:32 +1100
committerCon Kolivas <kernel@kolivas.org>2016-10-28 08:50:32 +1100
commit7ac11cf6e3aa5646bf3d1c4ec8f13f69e4593e52 (patch)
tree4c10c13bf108ee564e14e024ef681cbb374c1b5c /kernel
parenteb53ae396a1b7c97563744657a458dd029ec7ca3 (diff)
Use niffies in update load avg and include iowait in load.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/MuQSS.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/sched/MuQSS.c b/kernel/sched/MuQSS.c
index 40e047013f2e..eadd6f6263a5 100644
--- a/kernel/sched/MuQSS.c
+++ b/kernel/sched/MuQSS.c
@@ -866,10 +866,9 @@ static inline bool rq_local(struct rq *rq);
*/
static void update_load_avg(struct rq *rq)
{
- /* rq clock can go backwards so skip update if that happens */
- if (likely(rq->clock > rq->load_update)) {
- unsigned long us_interval = (rq->clock - rq->load_update) >> 10;
- long load, curload = rq_load(rq);
+ if (likely(rq->niffies > rq->load_update)) {
+ unsigned long us_interval = NS_TO_US(rq->niffies - rq->load_update);
+ long load, curload = rq_load(rq) + atomic_read(&rq->nr_iowait);
load = rq->load_avg - (rq->load_avg * us_interval * 5 / 262144);
if (unlikely(load < 0))
@@ -879,7 +878,7 @@ static void update_load_avg(struct rq *rq)
} else
return;
- rq->load_update = rq->clock;
+ rq->load_update = rq->niffies;
if (likely(rq_local(rq)))
cpufreq_trigger(rq->niffies, rq->load_avg);
}