diff options
author | Wanpeng Li <wanpeng.li@linux.intel.com> | 2014-11-06 02:22:44 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2014-11-16 04:58:57 -0500 |
commit | c51b8ab5ad972df26fd9c0ffad34870e98273c4c (patch) | |
tree | 793a6523061af08880dd5982f44719aac0df0a2d | |
parent | cb0b9f2445cdf9893352e4548582a2892af7137c (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.c | 5 |
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: | |||
1397 | out: | 1398 | out: |
1398 | put_task_struct(next_task); | 1399 | put_task_struct(next_task); |
1399 | 1400 | ||
1400 | return 1; | 1401 | return ret; |
1401 | } | 1402 | } |
1402 | 1403 | ||
1403 | static void push_dl_tasks(struct rq *rq) | 1404 | static void push_dl_tasks(struct rq *rq) |