From: Frederic Weisbecker <fweisbec@gmail.com>
To: Vincent Guittot <vincent.guittot@linaro.org>
Cc: linux-kernel@vger.kernel.org, linaro-dev@lists.linaro.org,
peterz@infradead.org, mingo@kernel.org, rostedt@goodmis.org,
efault@gmx.de
Subject: Re: [PATCH v4] sched: fix init NOHZ_IDLE flag
Date: Wed, 27 Feb 2013 17:13:29 +0100 [thread overview]
Message-ID: <20130227161326.GA25559@somewhere> (raw)
In-Reply-To: <CAKfTPtBsk9s-w0A-uMMJuHY=_1y8WhdkArRxN=Jk0qtQwPZyDQ@mail.gmail.com>
On Wed, Feb 27, 2013 at 09:28:26AM +0100, Vincent Guittot wrote:
> > Ok I don't like having a per cpu state in struct sched domain but for
> > now I can't find anything better. So my suggestion is that we do this
> > and describe well the race, define the issue in the changelog and code
> > comments and explain how we are solving it. This way at least the
> > issue is identified and known. Then later, on review or after the
> > patch is upstream, if somebody with some good taste comes with a
> > better idea, we consider it.
> >
> > What do you think?
>
> I don't have better solution than adding this state in the
> sched_domain if we want to keep the exact same behavior. This will be
> a bit of waste of mem because we don't need to update all sched_domain
> level (1st level is enough).
Or you can try something like the below. Both flags and sched_domain share the same
object here so the same RCU lifecycle. And there shouldn't be more overhead there
since accessing rq->sd_rq.sd is the same than rq->sd_rq in the ASM level: only
one pointer to dereference.
Also rq_idle becomes a separate value from rq->nohz_flags. It's a simple boolean
(just making it an int here because boolean size are a bit opaque, although they
are supposed to be char, let's just avoid surprises in structures).
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index cc03cfd..16c0d55 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -417,7 +417,10 @@ struct rq {
#ifdef CONFIG_SMP
struct root_domain *rd;
- struct sched_domain *sd;
+ struct sched_domain_rq {
+ struct sched_domain sd;
+ int rq_idle;
+ } __rcu *sd_rq;
unsigned long cpu_power;
@@ -505,9 +508,14 @@ DECLARE_PER_CPU(struct rq, runqueues);
#ifdef CONFIG_SMP
-#define rcu_dereference_check_sched_domain(p) \
- rcu_dereference_check((p), \
- lockdep_is_held(&sched_domains_mutex))
+#define rcu_dereference_check_sched_domain(p) ({\
+ struct sched_domain_rq *__sd_rq = rcu_dereference_check((p), \
+ lockdep_is_held(&sched_domains_mutex)); \
+ if (!__sd_rq) \
+ NULL; \
+ else \
+ &__sd_rq->sd; \
+})
/*
* The domain tree (rq->sd) is protected by RCU's quiescent state transition.
@@ -517,7 +525,7 @@ DECLARE_PER_CPU(struct rq, runqueues);
* preempt-disabled sections.
*/
#define for_each_domain(cpu, __sd) \
- for (__sd = rcu_dereference_check_sched_domain(cpu_rq(cpu)->sd); \
+ for (__sd = rcu_dereference_check_sched_domain(cpu_rq(cpu)->sd_rq); \
__sd; __sd = __sd->parent)
#define for_each_lower_domain(sd) for (; sd; sd = sd->child)
next prev parent reply other threads:[~2013-02-27 16:13 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-21 8:29 [PATCH v4] sched: fix init NOHZ_IDLE flag Vincent Guittot
2013-02-22 12:32 ` Frederic Weisbecker
2013-02-22 13:24 ` Vincent Guittot
2013-02-26 13:16 ` Frederic Weisbecker
2013-02-26 16:41 ` Vincent Guittot
2013-02-26 17:43 ` Frederic Weisbecker
2013-02-27 8:28 ` Vincent Guittot
2013-02-27 16:13 ` Frederic Weisbecker [this message]
2013-02-27 16:45 ` Vincent Guittot
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=20130227161326.GA25559@somewhere \
--to=fweisbec@gmail.com \
--cc=efault@gmx.de \
--cc=linaro-dev@lists.linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=vincent.guittot@linaro.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.