aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWanpeng Li <wanpeng.li@linux.intel.com>2014-11-06 02:22:44 -0500
committerIngo Molnar <mingo@kernel.org>2014-11-16 04:58:57 -0500
commitc51b8ab5ad972df26fd9c0ffad34870e98273c4c (patch)
tree793a6523061af08880dd5982f44719aac0df0a2d
parentcb0b9f2445cdf9893352e4548582a2892af7137c (diff)
sched/deadline: Fix rq->dl.pushable_tasks bug in push_dl_task()
Do not call dequeue_pushable_dl_task() when failing to push an eligible task, as it remains pushable, merely not at this particular moment. Actually the patch is the same behavior as commit 311e800e16f6 ("sched, rt: Fix rq->rt.pushable_tasks bug in push_rt_task()" in -rt side. Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Juri Lelli <juri.lelli@arm.com> Cc: Kirill Tkhai <ktkhai@parallels.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Link: http://lkml.kernel.org/r/1415258564-8573-1-git-send-email-wanpeng.li@linux.intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--kernel/sched/deadline.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index bb1464baee84..9594c128ff17 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -1328,6 +1328,7 @@ static int push_dl_task(struct rq *rq)
1328{ 1328{
1329 struct task_struct *next_task; 1329 struct task_struct *next_task;
1330 struct rq *later_rq; 1330 struct rq *later_rq;
1331 int ret = 0;
1331 1332
1332 if (!rq->dl.overloaded) 1333 if (!rq->dl.overloaded)
1333 return 0; 1334 return 0;
@@ -1373,7 +1374,6 @@ retry:
1373 * The task is still there. We don't try 1374 * The task is still there. We don't try
1374 * again, some other cpu will pull it when ready. 1375 * again, some other cpu will pull it when ready.
1375 */ 1376 */
1376 dequeue_pushable_dl_task(rq, next_task);
1377 goto out; 1377 goto out;
1378 } 1378 }
1379 1379
@@ -1389,6 +1389,7 @@ retry:
1389 deactivate_task(rq, next_task, 0); 1389 deactivate_task(rq, next_task, 0);
1390 set_task_cpu(next_task, later_rq->cpu); 1390 set_task_cpu(next_task, later_rq->cpu);
1391 activate_task(later_rq, next_task, 0); 1391 activate_task(later_rq, next_task, 0);
1392 ret = 1;
1392 1393
1393 resched_curr(later_rq); 1394 resched_curr(later_rq);
1394 1395
@@ -1397,7 +1398,7 @@ retry:
1397out: 1398out:
1398 put_task_struct(next_task); 1399 put_task_struct(next_task);
1399 1400
1400 return 1; 1401 return ret;
1401} 1402}
1402 1403
1403static void push_dl_tasks(struct rq *rq) 1404static void push_dl_tasks(struct rq *rq)