* [PATCH] sched/rt/deadline: Don't push if task's scheduling class was changed
@ 2016-05-09 4:11 Xunlei Pang
2016-05-09 15:24 ` Steven Rostedt
2016-05-10 8:39 ` [tip:sched/urgent] sched/rt, sched/dl: " tip-bot for Xunlei Pang
0 siblings, 2 replies; 3+ messages in thread
From: Xunlei Pang @ 2016-05-09 4:11 UTC (permalink / raw)
To: linux-kernel
Cc: Peter Zijlstra, Juri Lelli, Ingo Molnar, Steven Rostedt, Xunlei Pang
We got a warning below:
WARNING: CPU: 1 PID: 2468 at kernel/sched/core.c:1161 set_task_cpu+0x1af/0x1c0
CPU: 1 PID: 2468 Comm: bugon Not tainted 4.6.0-rc3+ #16
Hardware name: Intel Corporation Broadwell Client
0000000000000086 0000000089618374 ffff8800897a7d50 ffffffff8133dc8c
0000000000000000 0000000000000000 ffff8800897a7d90 ffffffff81089921
0000048981037f39 ffff88016c4315c0 ffff88016ecd6e40 0000000000000000
Call Trace:
[<ffffffff8133dc8c>] dump_stack+0x63/0x87
[<ffffffff81089921>] __warn+0xd1/0xf0
[<ffffffff81089a5d>] warn_slowpath_null+0x1d/0x20
[<ffffffff810b48ff>] set_task_cpu+0x1af/0x1c0
[<ffffffff810cc90a>] push_dl_task.part.34+0xea/0x180
[<ffffffff810ccd17>] push_dl_tasks+0x17/0x30
[<ffffffff8118d17a>] __balance_callback+0x45/0x5c
[<ffffffff810b2f46>] __sched_setscheduler+0x906/0xb90
[<ffffffff810b6f50>] SyS_sched_setattr+0x150/0x190
[<ffffffff81003c12>] do_syscall_64+0x62/0x110
[<ffffffff816b5021>] entry_SYSCALL64_slow_path+0x25/0x25
The corresponding warning triggering code:
WARN_ON_ONCE(p->state == TASK_RUNNING &&
p->sched_class == &fair_sched_class &&
(p->on_rq && !task_on_rq_migrating(p)))
This is because in find_lock_later_rq(), the task whose scheduling
class was changed to fair class is still pushed away as deadline.
So, check in find_lock_later_rq() after double_lock_balance(), if the
scheduling class of the deadline task was changed, break and retry.
Apply the same logic to RT.
Signed-off-by: Xunlei Pang <xlpang@redhat.com>
---
kernel/sched/deadline.c | 1 +
kernel/sched/rt.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index 169d40d..57eb3e4 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -1385,6 +1385,7 @@ static struct rq *find_lock_later_rq(struct task_struct *task, struct rq *rq)
!cpumask_test_cpu(later_rq->cpu,
&task->cpus_allowed) ||
task_running(rq, task) ||
+ !dl_task(task) ||
!task_on_rq_queued(task))) {
double_unlock_balance(rq, later_rq);
later_rq = NULL;
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index ecfc83d..c10a6f5 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -1720,6 +1720,7 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
!cpumask_test_cpu(lowest_rq->cpu,
tsk_cpus_allowed(task)) ||
task_running(rq, task) ||
+ !rt_task(task) ||
!task_on_rq_queued(task))) {
double_unlock_balance(rq, lowest_rq);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] sched/rt/deadline: Don't push if task's scheduling class was changed
2016-05-09 4:11 [PATCH] sched/rt/deadline: Don't push if task's scheduling class was changed Xunlei Pang
@ 2016-05-09 15:24 ` Steven Rostedt
2016-05-10 8:39 ` [tip:sched/urgent] sched/rt, sched/dl: " tip-bot for Xunlei Pang
1 sibling, 0 replies; 3+ messages in thread
From: Steven Rostedt @ 2016-05-09 15:24 UTC (permalink / raw)
To: Xunlei Pang; +Cc: linux-kernel, Peter Zijlstra, Juri Lelli, Ingo Molnar
On Mon, 9 May 2016 12:11:31 +0800
Xunlei Pang <xlpang@redhat.com> wrote:
> We got a warning below:
> WARNING: CPU: 1 PID: 2468 at kernel/sched/core.c:1161 set_task_cpu+0x1af/0x1c0
> CPU: 1 PID: 2468 Comm: bugon Not tainted 4.6.0-rc3+ #16
> Hardware name: Intel Corporation Broadwell Client
> 0000000000000086 0000000089618374 ffff8800897a7d50 ffffffff8133dc8c
> 0000000000000000 0000000000000000 ffff8800897a7d90 ffffffff81089921
> 0000048981037f39 ffff88016c4315c0 ffff88016ecd6e40 0000000000000000
> Call Trace:
> [<ffffffff8133dc8c>] dump_stack+0x63/0x87
> [<ffffffff81089921>] __warn+0xd1/0xf0
> [<ffffffff81089a5d>] warn_slowpath_null+0x1d/0x20
> [<ffffffff810b48ff>] set_task_cpu+0x1af/0x1c0
> [<ffffffff810cc90a>] push_dl_task.part.34+0xea/0x180
> [<ffffffff810ccd17>] push_dl_tasks+0x17/0x30
> [<ffffffff8118d17a>] __balance_callback+0x45/0x5c
> [<ffffffff810b2f46>] __sched_setscheduler+0x906/0xb90
> [<ffffffff810b6f50>] SyS_sched_setattr+0x150/0x190
> [<ffffffff81003c12>] do_syscall_64+0x62/0x110
> [<ffffffff816b5021>] entry_SYSCALL64_slow_path+0x25/0x25
>
> The corresponding warning triggering code:
> WARN_ON_ONCE(p->state == TASK_RUNNING &&
> p->sched_class == &fair_sched_class &&
> (p->on_rq && !task_on_rq_migrating(p)))
>
> This is because in find_lock_later_rq(), the task whose scheduling
> class was changed to fair class is still pushed away as deadline.
>
> So, check in find_lock_later_rq() after double_lock_balance(), if the
> scheduling class of the deadline task was changed, break and retry.
> Apply the same logic to RT.
>
> Signed-off-by: Xunlei Pang <xlpang@redhat.com>
Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
-- Steve
> ---
> kernel/sched/deadline.c | 1 +
> kernel/sched/rt.c | 1 +
> 2 files changed, 2 insertions(+)
>
> diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
> index 169d40d..57eb3e4 100644
> --- a/kernel/sched/deadline.c
> +++ b/kernel/sched/deadline.c
> @@ -1385,6 +1385,7 @@ static struct rq *find_lock_later_rq(struct task_struct *task, struct rq *rq)
> !cpumask_test_cpu(later_rq->cpu,
> &task->cpus_allowed) ||
> task_running(rq, task) ||
> + !dl_task(task) ||
> !task_on_rq_queued(task))) {
> double_unlock_balance(rq, later_rq);
> later_rq = NULL;
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index ecfc83d..c10a6f5 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -1720,6 +1720,7 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
> !cpumask_test_cpu(lowest_rq->cpu,
> tsk_cpus_allowed(task)) ||
> task_running(rq, task) ||
> + !rt_task(task) ||
> !task_on_rq_queued(task))) {
>
> double_unlock_balance(rq, lowest_rq);
^ permalink raw reply [flat|nested] 3+ messages in thread
* [tip:sched/urgent] sched/rt, sched/dl: Don't push if task's scheduling class was changed
2016-05-09 4:11 [PATCH] sched/rt/deadline: Don't push if task's scheduling class was changed Xunlei Pang
2016-05-09 15:24 ` Steven Rostedt
@ 2016-05-10 8:39 ` tip-bot for Xunlei Pang
1 sibling, 0 replies; 3+ messages in thread
From: tip-bot for Xunlei Pang @ 2016-05-10 8:39 UTC (permalink / raw)
To: linux-tip-commits
Cc: juri.lelli, a.p.zijlstra, tglx, xlpang, linux-kernel, hpa,
rostedt, mingo, peterz
Commit-ID: 13b5ab02ae118fc8dfdc2b8597688ec4a11d5b53
Gitweb: http://git.kernel.org/tip/13b5ab02ae118fc8dfdc2b8597688ec4a11d5b53
Author: Xunlei Pang <xlpang@redhat.com>
AuthorDate: Mon, 9 May 2016 12:11:31 +0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 10 May 2016 10:02:46 +0200
sched/rt, sched/dl: Don't push if task's scheduling class was changed
We got this warning:
WARNING: CPU: 1 PID: 2468 at kernel/sched/core.c:1161 set_task_cpu+0x1af/0x1c0
[...]
Call Trace:
dump_stack+0x63/0x87
__warn+0xd1/0xf0
warn_slowpath_null+0x1d/0x20
set_task_cpu+0x1af/0x1c0
push_dl_task.part.34+0xea/0x180
push_dl_tasks+0x17/0x30
__balance_callback+0x45/0x5c
__sched_setscheduler+0x906/0xb90
SyS_sched_setattr+0x150/0x190
do_syscall_64+0x62/0x110
entry_SYSCALL64_slow_path+0x25/0x25
This corresponds to:
WARN_ON_ONCE(p->state == TASK_RUNNING &&
p->sched_class == &fair_sched_class &&
(p->on_rq && !task_on_rq_migrating(p)))
It happens because in find_lock_later_rq(), the task whose scheduling
class was changed to fair class is still pushed away as if it were
a deadline task ...
So, check in find_lock_later_rq() after double_lock_balance(), if the
scheduling class of the deadline task was changed, break and retry.
Apply the same logic to RT tasks.
Signed-off-by: Xunlei Pang <xlpang@redhat.com>
Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Juri Lelli <juri.lelli@arm.com>
Link: http://lkml.kernel.org/r/1462767091-1215-1-git-send-email-xlpang@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
kernel/sched/deadline.c | 1 +
kernel/sched/rt.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index affd97e..686ec8a 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -1394,6 +1394,7 @@ static struct rq *find_lock_later_rq(struct task_struct *task, struct rq *rq)
!cpumask_test_cpu(later_rq->cpu,
&task->cpus_allowed) ||
task_running(rq, task) ||
+ !dl_task(task) ||
!task_on_rq_queued(task))) {
double_unlock_balance(rq, later_rq);
later_rq = NULL;
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index c41ea7a..ec4f538d 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -1729,6 +1729,7 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
!cpumask_test_cpu(lowest_rq->cpu,
tsk_cpus_allowed(task)) ||
task_running(rq, task) ||
+ !rt_task(task) ||
!task_on_rq_queued(task))) {
double_unlock_balance(rq, lowest_rq);
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-05-10 8:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-09 4:11 [PATCH] sched/rt/deadline: Don't push if task's scheduling class was changed Xunlei Pang
2016-05-09 15:24 ` Steven Rostedt
2016-05-10 8:39 ` [tip:sched/urgent] sched/rt, sched/dl: " tip-bot for Xunlei Pang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.