From: Frederic Weisbecker <fweisbec@gmail.com>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
Josh Triplett <josh@joshtriplett.org>
Subject: Re: [PATCH 1/4] rcu: Don't check irq nesting from rcu idle entry/exit
Date: Tue, 29 Nov 2011 01:26:01 +0100 [thread overview]
Message-ID: <20111129002558.GA18182@somewhere.redhat.com> (raw)
In-Reply-To: <20111129002244.GO2346@linux.vnet.ibm.com>
On Mon, Nov 28, 2011 at 04:22:44PM -0800, Paul E. McKenney wrote:
> On Mon, Nov 28, 2011 at 10:24:44PM +0100, Frederic Weisbecker wrote:
> > rcu_idle_enter() and rcu_idle_exit() don't need to check
> > the irq nesting as they are not called from irq.
> >
> > Only check dyntick_nesting from rcu_irq_enter() and
> > rcu_irq_exit().
> >
> > Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
> > Cc: Josh Triplett <josh@joshtriplett.org>
> > ---
> > kernel/rcutree.c | 18 ++++++++----------
> > 1 files changed, 8 insertions(+), 10 deletions(-)
>
> I have queued this. I had to update it to deal with a recent conflicting
> update, please see below for the new version.
>
> Thanx, Paul
Hmm, seems there is a problem. Look below:
>
> ------------------------------------------------------------------------
>
> rcu: Don't check irq nesting from rcu idle entry/exit
>
> Because tasks do not nest, rcu_idle_enter() and rcu_idle_exit() do
> not need to check for nesting. This commit therefore moves nesting
> checks from rcu_idle_enter_common() to rcu_irq_exit() and from
> rcu_idle_exit_common() to rcu_irq_enter().
>
> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
> Cc: Josh Triplett <josh@joshtriplett.org>
> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
>
> diff --git a/kernel/rcutree.c b/kernel/rcutree.c
> index bf085d7..54d9b4f 100644
> --- a/kernel/rcutree.c
> +++ b/kernel/rcutree.c
> @@ -350,10 +350,6 @@ static int rcu_implicit_offline_qs(struct rcu_data *rdp)
> */
> static void rcu_idle_enter_common(struct rcu_dynticks *rdtp, long long oldval)
> {
> - if (rdtp->dynticks_nesting) {
> - trace_rcu_dyntick("--=", oldval, rdtp->dynticks_nesting);
> - return;
> - }
> trace_rcu_dyntick("Start", oldval, rdtp->dynticks_nesting);
> if (!is_idle_task(current)) {
> struct task_struct *idle = idle_task(smp_processor_id());
> @@ -426,7 +422,10 @@ void rcu_irq_exit(void)
> oldval = rdtp->dynticks_nesting;
> rdtp->dynticks_nesting--;
> WARN_ON_ONCE(rdtp->dynticks_nesting < 0);
> - rcu_idle_enter_common(rdtp, oldval);
> + if (rdtp->dynticks_nesting)
> + trace_rcu_dyntick("--=", oldval, rdtp->dynticks_nesting);
> + else
> + rcu_idle_enter_common(rdtp, oldval);
> local_irq_restore(flags);
> }
>
> @@ -439,10 +438,6 @@ void rcu_irq_exit(void)
> */
> static void rcu_idle_exit_common(struct rcu_dynticks *rdtp, long long oldval)
> {
> - if (oldval) {
> - trace_rcu_dyntick("++=", oldval, rdtp->dynticks_nesting);
> - return;
> - }
> smp_mb__before_atomic_inc(); /* Force ordering w/previous sojourn. */
> atomic_inc(&rdtp->dynticks);
> /* CPUs seeing atomic_inc() must see later RCU read-side crit sects */
> @@ -519,6 +514,10 @@ void rcu_irq_enter(void)
> rdtp->dynticks_nesting++;
> WARN_ON_ONCE(rdtp->dynticks_nesting == 0);
> rcu_idle_exit_common(rdtp, oldval);
It's now calling rcu_idle_exit_common twice?
> + if (oldval)
> + trace_rcu_dyntick("++=", oldval, rdtp->dynticks_nesting);
> + else
> + rcu_idle_exit_common(rdtp, oldval);
> local_irq_restore(flags);
> }
>
>
next prev parent reply other threads:[~2011-11-29 0:26 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-28 21:24 [PATCH 0/4] rcu: Make new RCU dynticks API work with nohz cpusets Frederic Weisbecker
2011-11-28 21:24 ` [PATCH 1/4] rcu: Don't check irq nesting from rcu idle entry/exit Frederic Weisbecker
2011-11-29 0:22 ` Paul E. McKenney
2011-11-29 0:26 ` Frederic Weisbecker [this message]
2011-11-29 0:39 ` Paul E. McKenney
2011-11-29 0:58 ` Frederic Weisbecker
2011-11-28 21:24 ` [PATCH 2/4] rcu: Irq nesting is always 0 on rcu_enter_idle_common Frederic Weisbecker
2011-11-29 0:29 ` Paul E. McKenney
2011-11-29 1:00 ` Frederic Weisbecker
2011-11-28 21:24 ` [PATCH 3/4 RFC] rcu: New rcu_user_enter() and rcu_user_exit() APIs Frederic Weisbecker
2011-11-28 21:24 ` [PATCH 4/4 RFC] rcu: New rcu_user_enter_irq() and rcu_user_exit_irq() APIs Frederic Weisbecker
2011-11-28 21:53 ` Josh Triplett
2011-11-29 1:00 ` Paul E. McKenney
2011-11-29 5:21 ` Josh Triplett
2011-11-29 14:05 ` Frederic Weisbecker
2011-11-29 18:23 ` Paul E. McKenney
2011-11-29 13:53 ` Frederic Weisbecker
2011-11-29 5:22 ` [PATCH 0/4] rcu: Make new RCU dynticks API work with nohz cpusets Josh Triplett
2011-11-29 5:43 ` Paul E. McKenney
2011-11-29 8:48 ` Josh Triplett
2011-11-29 17:44 ` Paul E. McKenney
2011-11-29 18:07 ` Frederic Weisbecker
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=20111129002558.GA18182@somewhere.redhat.com \
--to=fweisbec@gmail.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@linux.vnet.ibm.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.