sched/deadline: fix rq->dl.pushable_tasks bug in push_dl_task()
PATCH 1/1 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.
--- kernel/sched/deadline.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/sched/deadline.c +3 -2
@@ -1331,6 +1331,7 @@ static int push_dl_task(struct rq *rq) {struct task_struct *next_task;struct rq *later_rq; +int ret =0 ;if (!rq->dl.overloaded)return 0 ;
@@ -1376,7 +1377,6 @@ retry:* The task is still there. We don't try * again, some other cpu will pull it when ready. */ -dequeue_pushable_dl_task (rq, next_task); goto out; }
@@ -1392,6 +1392,7 @@ retry:deactivate_task (rq, next_task,0 );set_task_cpu (next_task, later_rq->cpu);activate_task (later_rq, next_task,0 ); + ret =1 ;resched_curr (later_rq);
@@ -1400,7 +1401,7 @@ retry: out:put_task_struct (next_task); -return 1 ; +return ret; }static void push_dl_tasks (struct rq *rq)
Signature · 1 line
1.9.1
Ping Juri, could you review this one and other deadline patches of mine? ;-)
Quoted 47 lines · Wanpeng Li
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 commit311e800e16f6("sched,
rt: Fixrq->rt.pushable_tasksbug inpush_rt_task()" in -rt side.Signed-off-by Wanpeng Li <[email protected]>--- kernel/sched/deadline.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)kernel/sched/deadline.c +3
-2@@ -1331,6 +1331,7 @@ static int push_dl_task(struct rq *rq) {struct task_struct *next_task;struct rq *later_rq; +int ret =0 ;if (!rq->dl.overloaded)return 0 ;@@ -1376,7 +1377,6 @@ retry:* The task is still there. We don't try * again, some other cpu will pull it when ready. */ -dequeue_pushable_dl_task (rq, next_task); goto out; }@@ -1392,6 +1392,7 @@ retry:deactivate_task (rq, next_task,0 );set_task_cpu (next_task, later_rq->cpu);activate_task (later_rq, next_task,0 ); + ret =1 ;resched_curr (later_rq);@@ -1400,7 +1401,7 @@ retry: out:put_task_struct (next_task); -return 1 ; +return ret; }static void push_dl_tasks (struct rq *rq)
Hi,
Quoted 40 lines · Wanpeng Li
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 commit311e800e16f6("sched,
rt: Fixrq->rt.pushable_tasksbug inpush_rt_task()" in -rt side.Signed-off-by Wanpeng Li <[email protected]>--- kernel/sched/deadline.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)kernel/sched/deadline.c +2
-1@@ -1331,6 +1331,7 @@ static int push_dl_task(struct rq *rq) {struct task_struct *next_task;struct rq *later_rq; +int ret =0 ;if (!rq->dl.overloaded)return 0 ;@@ -1376,7 +1377,6 @@ retry:* The task is still there. We don't try * again, some other cpu will pull it when ready. */ -dequeue_pushable_dl_task (rq, next_task); goto out; }@@ -1392,6 +1392,7 @@ retry:deactivate_task (rq, next_task,0 );set_task_cpu (next_task, later_rq->cpu);activate_task (later_rq, next_task,0 ); + ret =1 ;resched_curr (later_rq);
kernel/sched/deadline.c retry: · line 1407
Quoted 8 lines
kernel/sched/deadline.c +1
-1@@ -1400,7 +1401,7 @@ retry: out:put_task_struct (next_task); -return 1 ; +return ret; }static void push_dl_tasks (struct rq *rq)
This looks good.
Thanks,
- Juri
tip-bot for Wanpeng Li
merge bot[tip:sched/core] sched/deadline: Fix rq-> dl.pushable_tasks bug in push_dl_task()
In reply to Wanpeng Lisched/deadline: Fix rq->dl.pushable_tasks bug in push_dl_task()
Commit-ID: c51b8ab5ad972df26fd9c0ffad34870e98273c4c Gitweb: http://git.kernel.org/tip/c51b8ab5ad972df26fd9c0ffad34870e98273c4c Author: Wanpeng Li <[email protected]> AuthorDate: Thu, 6 Nov 2014 15:22:44 +0800 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 16 Nov 2014 10:58:57 +0100
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.
--- kernel/sched/deadline.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/sched/deadline.c +3 -2
@@ -1328,6 +1328,7 @@ static int push_dl_task(struct rq *rq) {struct task_struct *next_task;struct rq *later_rq; +int ret =0 ;if (!rq->dl.overloaded)return 0 ;
@@ -1373,7 +1374,6 @@ retry:* The task is still there. We don't try * again, some other cpu will pull it when ready. */ -dequeue_pushable_dl_task (rq, next_task); goto out; }
@@ -1389,6 +1389,7 @@ retry:deactivate_task (rq, next_task,0 );set_task_cpu (next_task, later_rq->cpu);activate_task (later_rq, next_task,0 ); + ret =1 ;resched_curr (later_rq);
@@ -1397,7 +1398,7 @@ retry: out:put_task_struct (next_task); -return 1 ; +return ret; }static void push_dl_tasks (struct rq *rq)