From: Juri Lelli <juri.lelli@arm.com>
To: Wanpeng Li <wanpeng.li@linux.intel.com>,
Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Kirill Tkhai <tkhai@yandex.ru>
Subject: Re: [PATCH RESEND] sched/deadline: fix pull if dl task who's prio changed is not on queue
Date: Tue, 03 Mar 2015 09:32:29 +0000 [thread overview]
Message-ID: <54F57FAD.4020306@arm.com> (raw)
In-Reply-To: <1424918285-94574-1-git-send-email-wanpeng.li@linux.intel.com>
Hi,
[+Kirill]
On 26/02/2015 02:38, Wanpeng Li wrote:
> Dl task who is not on queue and it is also the curr task simultaneously
> can not happen. In addition, pull since the priority of a not on queue
> dl task doesn't make any sense.
>
> This patch fix it by don't pull if dl task who's prio changed is not on
> queue.
>
So, this is something that was already raised by Kirill, but I always
forgot to fix :/. Thanks for reminding me!
I have this fix:
>From 8fcb04eee2d76042970e9561d253d1bc1fe4cc2b Mon Sep 17 00:00:00 2001
From: Juri Lelli <juri.lelli@arm.com>
Date: Tue, 3 Mar 2015 07:51:56 +0000
Subject: [PATCH] sched/deadline: cleanup prio_changed_dl()
rq->curr task can't be in "dequeued" state in prio_changed_dl()
(The only place we can have that is __schedule()), but it can
be throttled, in which case we shouldn't do balancing.
Also modify the "else" branch, which is dead code (switched_to_dl()
is not interested in dequeued tasks and we are not interested
in balancing in this case), to take into account updates to not
running tasks.
Signed-off-by: Juri Lelli <juri.lelli@arm.com>
Suggested-by: Kirill Tkhai <ktkhai@parallels.com>
Suggested-by: Wanpeng Li <wanpeng.li@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Juri Lelli <juri.lelli@gmail.com>
Cc: linux-kernel@vger.kernel.org
---
kernel/sched/deadline.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index cfa45c1..9d83748 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -1759,7 +1759,10 @@ static void switched_to_dl(struct rq *rq, struct task_struct *p)
static void prio_changed_dl(struct rq *rq, struct task_struct *p,
int oldprio)
{
- if (task_on_rq_queued(p) || rq->curr == p) {
+ if (!on_dl_rq(&p->dl))
+ return;
+
+ if (rq->curr == p) {
#ifdef CONFIG_SMP
/*
* This might be too much, but unfortunately
@@ -1786,8 +1789,15 @@ static void prio_changed_dl(struct rq *rq, struct task_struct *p,
*/
resched_curr(rq);
#endif /* CONFIG_SMP */
- } else
- switched_to_dl(rq, p);
+ } else {
+ /*
+ * This task is not running, so if its deadline is
+ * now more imminent than that of the current running
+ * task then reschedule.
+ */
+ if (dl_time_before(p->dl.deadline, rq->curr->dl.deadline))
+ resched_curr(rq);
+ }
}
const struct sched_class dl_sched_class = {
--
2.3.0
> Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com>
> ---
> kernel/sched/deadline.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
> index 49f92c8..ca391c0 100644
> --- a/kernel/sched/deadline.c
> +++ b/kernel/sched/deadline.c
> @@ -1728,7 +1728,10 @@ static void switched_to_dl(struct rq *rq, struct task_struct *p)
> static void prio_changed_dl(struct rq *rq, struct task_struct *p,
> int oldprio)
> {
> - if (task_on_rq_queued(p) || rq->curr == p) {
> + if (!task_on_rq_queued(p))
> + return;
> +
> + if (rq->curr == p) {
> #ifdef CONFIG_SMP
> /*
> * This might be too much, but unfortunately
>
next prev parent reply other threads:[~2015-03-03 9:32 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-26 2:38 [PATCH RESEND] sched/deadline: fix pull if dl task who's prio changed is not on queue Wanpeng Li
2015-03-03 9:32 ` Juri Lelli [this message]
2015-03-05 1:27 ` Wanpeng Li
2015-03-05 1:28 ` Wanpeng Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54F57FAD.4020306@arm.com \
--to=juri.lelli@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=tkhai@yandex.ru \
--cc=wanpeng.li@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.