aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWanpeng Li <wanpeng.li@linux.intel.com>2014-10-21 20:36:43 -0400
committerIngo Molnar <mingo@kernel.org>2014-10-28 05:47:57 -0400
commitd9aade7ae1d283097a3f626790e7c325a5c69007 (patch)
treeb96abee1f9b1fdd554b0c2711fe9fad45f0e2c24
parente2336f6e51edda875a49770b616ed5b02a74665b (diff)
sched/deadline: Do not try to push tasks if pinned task switches to dl
As Kirill mentioned (https://lkml.org/lkml/2013/1/29/118): | If rq has already had 2 or more pushable tasks and we try to add a | pinned task then call of push_rt_task will just waste a time. Just switched pinned task is not able to be pushed. If the rq has had several dl tasks before they have already been considered as candidates to be pushed (or pulled). This patch implements the same behavior as rt class which introduced by commit 10447917551e ("sched/rt: Do not try to push tasks if pinned task switches to RT"). Suggested-by: Kirill V Tkhai <tkhai@yandex.ru> Acked-by: Juri Lelli <juri.lelli@arm.com> Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: http://lkml.kernel.org/r/1413938203-224610-1-git-send-email-wanpeng.li@linux.intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--kernel/sched/deadline.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index 5285332392d5..9d1e76a21297 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -1622,7 +1622,8 @@ static void switched_to_dl(struct rq *rq, struct task_struct *p)
1622 1622
1623 if (task_on_rq_queued(p) && rq->curr != p) { 1623 if (task_on_rq_queued(p) && rq->curr != p) {
1624#ifdef CONFIG_SMP 1624#ifdef CONFIG_SMP
1625 if (rq->dl.overloaded && push_dl_task(rq) && rq != task_rq(p)) 1625 if (p->nr_cpus_allowed > 1 && rq->dl.overloaded &&
1626 push_dl_task(rq) && rq != task_rq(p))
1626 /* Only reschedule if pushing failed */ 1627 /* Only reschedule if pushing failed */
1627 check_resched = 0; 1628 check_resched = 0;
1628#endif /* CONFIG_SMP */ 1629#endif /* CONFIG_SMP */