From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Thoughts on this RCU idle entry/exit patch?
Date: Tue, 8 Oct 2013 14:12:18 -0700 [thread overview]
Message-ID: <20131008211218.GV5790@linux.vnet.ibm.com> (raw)
In-Reply-To: <20131008203427.GE8392@localhost.localdomain>
On Tue, Oct 08, 2013 at 10:34:28PM +0200, Frederic Weisbecker wrote:
> On Mon, Oct 07, 2013 at 08:39:55AM -0700, Paul E. McKenney wrote:
> > Hello, Frederic!
> >
> > The following patch seems to me to be a good idea to better handle
> > task nesting. Any reason why it would be a bad thing?
> >
> > Thanx, Paul
> >
> > ------------------------------------------------------------------------
> >
> > rcu: Allow task-level idle entry/exit nesting
> >
> > The current task-level idle entry/exit code forces an entry/exit on
> > each call, regardless of the nesting level. This commit therefore
> > properly accounts for nesting.
> >
> > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
>
> Looks good. In fact, the current code is even buggy because two nesting rcu_user_eqs()
> as in:
>
> rcu_eqs_enter()
> rcu_eqs_enter()
> rcu_eqs_exit()
> rcu_eqs_exit()
>
> would result in rdtp->dynticks wrong increment, right?
That was my thought, but I figured I should run it past you in case
there was some subtle tie-in to NO_HZ_FULL.
> So that's even a bug fix. I wonder if it's a regression. That said rcu_eqs_enter_common()
> should warn on such miscount, so may be these functions actually don't nest in practice
> or you would have received such warnings.
And the lack of such warnings was another reason I felt the need to check
with you.
> So I wonder, do we want to continue to allow this nesting? I remember that DYNTICK_TASK_NEST_*
> stuff is there to protects against non finishing interrupts on some archs (I also remember that
> this, or at least a practical scenario for this, was hard to really define though :o)
> But then wouldn't it involve other kind of scenario like this?
>
> rcu_irq_enter()
> rcu_eqs_enter()
> rcu_eqs_exit()
> ...
>
> Anyway, that's just random thougths on further simplifications, in any case, this
> patch looks good.
Yep, if no task-level nesting is ever required, things could be a bit
simpler. I would be a bit slow about making such a change, though.
After all, the need to deal with Hotel California interrupts means that
handling nesting isn't that big of a deal comparatively. ;-)
May I add your Reviewed-by?
Thanx, Paul
> Thanks.
>
> >
> > diff --git a/kernel/rcutree.c b/kernel/rcutree.c
> > index 106f7f5cdd1d..f0be20886617 100644
> > --- a/kernel/rcutree.c
> > +++ b/kernel/rcutree.c
> > @@ -411,11 +411,12 @@ static void rcu_eqs_enter(bool user)
> > rdtp = this_cpu_ptr(&rcu_dynticks);
> > oldval = rdtp->dynticks_nesting;
> > WARN_ON_ONCE((oldval & DYNTICK_TASK_NEST_MASK) == 0);
> > - if ((oldval & DYNTICK_TASK_NEST_MASK) == DYNTICK_TASK_NEST_VALUE)
> > + if ((oldval & DYNTICK_TASK_NEST_MASK) == DYNTICK_TASK_NEST_VALUE) {
> > rdtp->dynticks_nesting = 0;
> > - else
> > + rcu_eqs_enter_common(rdtp, oldval, user);
> > + } else {
> > rdtp->dynticks_nesting -= DYNTICK_TASK_NEST_VALUE;
> > - rcu_eqs_enter_common(rdtp, oldval, user);
> > + }
> > }
> >
> > /**
> > @@ -533,11 +534,12 @@ static void rcu_eqs_exit(bool user)
> > rdtp = this_cpu_ptr(&rcu_dynticks);
> > oldval = rdtp->dynticks_nesting;
> > WARN_ON_ONCE(oldval < 0);
> > - if (oldval & DYNTICK_TASK_NEST_MASK)
> > + if (oldval & DYNTICK_TASK_NEST_MASK) {
> > rdtp->dynticks_nesting += DYNTICK_TASK_NEST_VALUE;
> > - else
> > + } else {
> > rdtp->dynticks_nesting = DYNTICK_TASK_EXIT_IDLE;
> > - rcu_eqs_exit_common(rdtp, oldval, user);
> > + rcu_eqs_exit_common(rdtp, oldval, user);
> > + }
> > }
> >
> > /**
> >
>
next prev parent reply other threads:[~2013-10-08 21:12 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-07 15:39 Thoughts on this RCU idle entry/exit patch? Paul E. McKenney
2013-10-08 20:34 ` Frederic Weisbecker
2013-10-08 21:12 ` Paul E. McKenney [this message]
2013-10-09 14:56 ` Frederic Weisbecker
2013-10-09 15:08 ` Paul E. McKenney
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=20131008211218.GV5790@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@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.