From: Luca Abeni <luca.abeni@unitn.it>
To: Wanpeng Li <wanpeng.li@hotmail.com>,
Juri Lelli <juri.lelli@arm.com>, Wanpeng Li <kernellwp@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5] sched/deadline: fix earliest_dl.next logic
Date: Wed, 2 Dec 2015 15:08:42 +0100 [thread overview]
Message-ID: <565EFB6A.10607@unitn.it> (raw)
In-Reply-To: <BLU436-SMTP1847631AC50CA1AC2525A0F800E0@phx.gbl>
Hi,
On 12/02/2015 02:33 PM, Wanpeng Li wrote:
[...]
>> We updated leftmost above, can't we simply use that path for this thing
>> below?
>
> Do you mean something like below?
>
> @@ -195,6 +195,9 @@ static void dequeue_pushable_dl_task(struct rq *rq, struct task_struct *p)
>
> next_node = rb_next(&p->pushable_dl_tasks);
> dl_rq->pushable_dl_tasks_leftmost = next_node;
> + if (has_pushable_dl_tasks(rq))
I do not know the rb trees code, but... Are you sre you can call has_pushable_tasks() here?
(I suspect pushable_dl_tasks_root is not updated yet, so maybe has_pushable_dl_tasks() risks
to return a wrong value?)
> + dl_rq->earliest_dl.next = rb_entry(rq->dl.pushable_dl_tasks_leftmost,
> + struct task_struct, pushable_dl_task)->dl.deadline;
I am not sure if this is what Juri meant, but maybe something like this?
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index 087d090..26d3279 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -185,11 +185,6 @@ static void enqueue_pushable_dl_task(struct rq *rq, struct task_struct *p)
rb_insert_color(&p->pushable_dl_tasks, &dl_rq->pushable_dl_tasks_root);
}
-static inline int has_pushable_dl_tasks(struct rq *rq)
-{
- return !RB_EMPTY_ROOT(&rq->dl.pushable_dl_tasks_root);
-}
-
static void dequeue_pushable_dl_task(struct rq *rq, struct task_struct *p)
{
struct dl_rq *dl_rq = &rq->dl;
@@ -202,16 +197,18 @@ static void dequeue_pushable_dl_task(struct rq *rq, struct task_struct *p)
next_node = rb_next(&p->pushable_dl_tasks);
dl_rq->pushable_dl_tasks_leftmost = next_node;
+ if (next_node)
+ dl_rq->earliest_dl.next = rb_entry(next_node,
+ struct task_struct, pushable_dl_tasks)->dl.deadline;
}
rb_erase(&p->pushable_dl_tasks, &dl_rq->pushable_dl_tasks_root);
RB_CLEAR_NODE(&p->pushable_dl_tasks);
+}
- if (has_pushable_dl_tasks(rq)) {
- p = rb_entry(rq->dl.pushable_dl_tasks_leftmost,
- struct task_struct, pushable_dl_tasks);
- dl_rq->earliest_dl.next = p->dl.deadline;
- }
+static inline int has_pushable_dl_tasks(struct rq *rq)
+{
+ return !RB_EMPTY_ROOT(&rq->dl.pushable_dl_tasks_root);
}
static int push_dl_task(struct rq *rq);
I do not know if it is correct, but I ran some quick tests and seem to work
without problems.
Luca
next prev parent reply other threads:[~2015-12-02 14:08 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-02 11:47 [PATCH v5] sched/deadline: fix earliest_dl.next logic Wanpeng Li
2015-12-02 12:04 ` Juri Lelli
[not found] ` <BLU436-SMTP1847631AC50CA1AC2525A0F800E0@phx.gbl>
2015-12-02 14:08 ` Luca Abeni [this message]
2015-12-03 2:25 ` Wanpeng Li
2015-12-03 8:37 ` Luca Abeni
2015-12-03 8:59 ` Wanpeng Li
2015-12-03 9:22 ` Juri Lelli
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=565EFB6A.10607@unitn.it \
--to=luca.abeni@unitn.it \
--cc=juri.lelli@arm.com \
--cc=kernellwp@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=wanpeng.li@hotmail.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.