* [PATCH -tip] sched/deadline: switched_to_dl() -- skip if task is current
@ 2014-01-28 7:18 Kirill Tkhai
0 siblings, 0 replies; only message in thread
From: Kirill Tkhai @ 2014-01-28 7:18 UTC (permalink / raw)
To: linux-kernel; +Cc: peterz, mingo, devel, juri.lelli
When p is current and it's not of dl class, then there are no other
dl taks in the rq. If we had had pushable tasks in some other rq,
they would have been pushed earlier. So, skip "p == rq->curr" case.
This helps to skip excess schedule() when class is changed.
The situation may be not rare. For example:
a small number of deadline tasks which have common rt_spinlocks
with fair tasks. Priority inheritance mechanism does this every
time it is acquiring a lock.
[This is confirmed by Juri Lelli and LKML was CC'ed, but
unfotunately I can't find direct link on lkml.org]
Signed-off-by: Kirill Tkhai <ktkhai@parallels.com>
CC: Juri Lelli <juri.lelli@gmail.com>
CC: Peter Zijlstra <peterz@infradead.org>
CC: Ingo Molnar <mingo@kernel.org>
---
kernel/sched/deadline.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index 0de2482..dd19d6d 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -1559,7 +1559,7 @@ static void switched_to_dl(struct rq *rq, struct task_struct *p)
if (unlikely(p->dl.dl_throttled))
return;
- if (p->on_rq || rq->curr != p) {
+ if (p->on_rq && rq->curr != p) {
#ifdef CONFIG_SMP
if (rq->dl.overloaded && push_dl_task(rq) && rq != task_rq(p))
/* Only reschedule if pushing failed */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2014-01-28 7:17 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-28 7:18 [PATCH -tip] sched/deadline: switched_to_dl() -- skip if task is current Kirill Tkhai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome