summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Yan <leo.yan@linaro.org>2017-03-27 15:00:14 +0100
committerChris Redpath <chris.redpath@arm.com>2017-07-25 16:31:00 +0100
commitebc28671a5a3a657c1f88fbde4be07c4ef395aef (patch)
treec6112e368022ec1a2f9285779a4a691ba5e7670e
parent7b63e1ff52134bbc27c6e30c1fd909ff9a87bc2b (diff)
sched/fair: kick nohz idle balance for misfit task
If there have misfit task on one CPU, current code does not handle this situation for nohz idle balance. As result, we can see the misfit task stays run on little core for long time. So this patch check if the CPU has misfit task or not. If has misfit task then kick nohz idle balance so finally can execute active balance. Change-Id: I117d3b7404296f8de11cb960a87a6b9a54a9f348 Signed-off-by: Leo Yan <leo.yan at linaro.org> [taken from https://lists.linaro.org/pipermail/eas-dev/2016-September/000551.html] Signed-off-by: Chris Redpath <chris.redpath@arm.com> Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com>
-rw-r--r--kernel/sched/fair.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index dff742f276d7..90b44c6cca37 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -9701,6 +9701,10 @@ static inline bool nohz_kick_needed(struct rq *rq)
(!energy_aware() || cpu_overutilized(cpu)))
return true;
+ /* Do idle load balance if there have misfit task */
+ if (energy_aware() && rq->misfit_task)
+ return true;
+
rcu_read_lock();
sd = rcu_dereference(per_cpu(sd_busy, cpu));
if (sd && !energy_aware()) {