From: Kirill Tkhai <tkhai@yandex.ru>
To: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Steven Rostedt <rostedt@goodmis.org>,
"stable@vger.kernel.org" <stable@vger.kernel.org>
Subject: Re: [PATCH] sched/rt: Fix rq's cpupri leak while enqueue/dequeue child RT entities
Date: Thu, 12 Dec 2013 14:30:03 +0400 [thread overview]
Message-ID: <305941386844203@web21j.yandex.ru> (raw)
In-Reply-To: <49231385567953@web4m.yandex.ru>
Ping!
27.11.2013, 19:59, "Kirill Tkhai" <tkhai@yandex.ru>:
> This patch touches RT group scheduling case.
>
> Functions inc_rt_prio_smp() and dec_rt_prio_smp() change (global) rq's priority,
> while rt_rq passed to them may be not the top-level rt_rq. This is wrong, because
> changing of priority on a child level does not guarantee that the priority is
> the highest all over the rq. So, this leak makes RT balancing unusable.
>
> The short example: the task having the highest priority among all rq's RT tasks
> (no one other task has the same priority) are waking on a throttle rt_rq.
> The rq's cpupri is set to the task's priority equivalent, but real
> rq->rt.highest_prio.curr is less.
>
> The patch below fixes the problem.
>
> It looks like all version have this bug, so I CC'ed stable mailing list.
>
> Signed-off-by: Kirill Tkhai <tkhai@yandex.ru>
> CC: Ingo Molnar <mingo@redhat.com>
> CC: Peter Zijlstra <peterz@infradead.org>
> CC: Steven Rostedt <rostedt@goodmis.org>
> CC: stable@vger.kernel.org
>---
> kernel/sched/rt.c | 14 ++++++++++++++
> 1 files changed, 14 insertions(+), 0 deletions(-)
>diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
>index 7d57275..1c40655 100644
>--- a/kernel/sched/rt.c
>+++ b/kernel/sched/rt.c
>@@ -901,6 +901,13 @@ inc_rt_prio_smp(struct rt_rq *rt_rq, int prio, int prev_prio)
> {
> struct rq *rq = rq_of_rt_rq(rt_rq);
>
>+#ifdef CONFIG_RT_GROUP_SCHED
>+ /*
>+ * Change rq's cpupri only if rt_rq is the top queue.
>+ */
>+ if (&rq->rt != rt_rq)
>+ return;
>+#endif
> if (rq->online && prio < prev_prio)
> cpupri_set(&rq->rd->cpupri, rq->cpu, prio);
> }
>@@ -910,6 +917,13 @@ dec_rt_prio_smp(struct rt_rq *rt_rq, int prio, int prev_prio)
> {
> struct rq *rq = rq_of_rt_rq(rt_rq);
>
>+#ifdef CONFIG_RT_GROUP_SCHED
>+ /*
>+ * Change rq's cpupri only if rt_rq is the top queue.
>+ */
>+ if (&rq->rt != rt_rq)
>+ return;
>+#endif
> if (rq->online && rt_rq->highest_prio.curr != prev_prio)
> cpupri_set(&rq->rd->cpupri, rq->cpu, rt_rq->highest_prio.curr);
> }
next prev parent reply other threads:[~2013-12-12 10:35 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-27 15:59 [PATCH] sched/rt: Fix rq's cpupri leak while enqueue/dequeue child RT entities Kirill Tkhai
2013-12-12 10:30 ` Kirill Tkhai [this message]
2013-12-13 15:42 ` Peter Zijlstra
2013-12-17 12:02 ` Kirill Tkhai
2013-12-17 12:02 ` Kirill Tkhai
2013-12-17 12:46 ` Peter Zijlstra
2013-12-17 12:46 ` Peter Zijlstra
2013-12-17 13:08 ` Kirill Tkhai
2013-12-17 13:08 ` Kirill Tkhai
2013-12-18 10:32 ` [tip:sched/core] sched/rt: Fix rq's cpupri leak while enqueue/ dequeue " tip-bot for Kirill Tkhai
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=305941386844203@web21j.yandex.ru \
--to=tkhai@yandex.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=stable@vger.kernel.org \
/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.