From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Alexander Gordeev <agordeev@redhat.com>
Cc: linux-kernel@vger.kernel.org, Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH v2 1/9] rcu: Panic if RCU tree can not accommodate all CPUs
Date: Tue, 2 Jun 2015 05:37:40 -0700 [thread overview]
Message-ID: <20150602123740.GF5989@linux.vnet.ibm.com> (raw)
In-Reply-To: <20150602064527.GA3679@agordeev.usersys.redhat.com>
On Tue, Jun 02, 2015 at 07:45:27AM +0100, Alexander Gordeev wrote:
> On Mon, Jun 01, 2015 at 11:37:21AM -0700, Paul E. McKenney wrote:
> > On Fri, May 29, 2015 at 11:53:37AM +0200, Alexander Gordeev wrote:
> > > Currently a condition when RCU tree is unable to accommodate
> > > the configured number of CPUs is not permitted and causes
> > > a fall back to compile-time values. However, the code has no
> > > means to exceed the RCU tree capacity neither at compile-time
> > > nor in run-time. Therefore, if the condition is met in run-
> > > time then it indicates a serios problem elsewhere and should
> > > be handled with a panic.
> > >
> > > Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> > > Cc: Steven Rostedt <rostedt@goodmis.org>
> > > Signed-off-by: Alexander Gordeev <agordeev@redhat.com>
> > > ---
> > > kernel/rcu/tree.c | 15 +++++++++------
> > > 1 file changed, 9 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> > > index 2fce662..66a4230 100644
> > > --- a/kernel/rcu/tree.c
> > > +++ b/kernel/rcu/tree.c
> > > @@ -4117,16 +4117,19 @@ static void __init rcu_init_geometry(void)
> > > rcu_capacity[i] = rcu_capacity[i - 1] * RCU_FANOUT;
> > >
> > > /*
> > > + * The tree must be able to accommodate the configured number of CPUs.
> > > + * If this limit is exceeded than we have a serious problem elsewhere.
> > > + *
> > > * The boot-time rcu_fanout_leaf parameter is only permitted
> > > * to increase the leaf-level fanout, not decrease it. Of course,
> > > * the leaf-level fanout cannot exceed the number of bits in
> > > - * the rcu_node masks. Finally, the tree must be able to accommodate
> > > - * the configured number of CPUs. Complain and fall back to the
> > > - * compile-time values if these limits are exceeded.
> > > + * the rcu_node masks. Complain and fall back to the compile-
> > > + * time values if these limits are exceeded.
> > > */
> > > - if (rcu_fanout_leaf < RCU_FANOUT_LEAF ||
> > > - rcu_fanout_leaf > sizeof(unsigned long) * 8 ||
> > > - n > rcu_capacity[MAX_RCU_LVLS]) {
> > > + if (n > rcu_capacity[MAX_RCU_LVLS])
> > > + panic("rcu_init_geometry: rcu_capacity[] is too small");
> >
> > The way this is set up, if the boot parameter (illegally) sets
> > rcu_fanout_lead smaller than RCU_FANOUT_LEAF, we might panic. It would
> > be far better to first check for rcu_fanout_leaf being out of bounds,
> > and only then have the possibility of panic(). That way, a typo in
> > the rcu_fanout_leaf boot paremeter is ignored, but with a splat.
> >
> > Or am I missing something here?
>
> I think you are quite right. But the bounds check is misplaced then.
> I would say, it should be placed before rcu_capacity[] seed, as it
> only deals with constants and has nothing with rcu_capacity[].
That makes sense as well.
> I will send the updated version.
Very good, looking forward to it!
By the way, on the specific configurations that I test, the patch
generates the same topology as previously, which is reassuring.
An exhaustive test is needed, of course.
Thanx, Paul
> > > + else if (rcu_fanout_leaf < RCU_FANOUT_LEAF ||
> > > + rcu_fanout_leaf > sizeof(unsigned long) * 8) {
> > > WARN_ON(1);
> > > return;
> > > }
> > > --
> > > 1.8.3.1
> > >
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
>
> --
> Regards,
> Alexander Gordeev
> agordeev@redhat.com
>
next prev parent reply other threads:[~2015-06-02 12:37 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-29 9:53 [PATCH v2 0/9] rcu: Cleanup RCU tree initialization Alexander Gordeev
2015-05-29 9:53 ` [PATCH v2 1/9] rcu: Panic if RCU tree can not accommodate all CPUs Alexander Gordeev
2015-06-01 18:37 ` Paul E. McKenney
2015-06-02 6:45 ` Alexander Gordeev
2015-06-02 12:37 ` Paul E. McKenney [this message]
2015-05-29 9:53 ` [PATCH v2 2/9] rcu: Remove superfluous local variable in rcu_init_geometry() Alexander Gordeev
2015-05-29 9:53 ` [PATCH v2 3/9] rcu: Cleanup rcu_init_geometry() code and arithmetics Alexander Gordeev
2015-05-29 9:53 ` [PATCH v2 4/9] rcu: Simplify rcu_init_geometry() capacity arithmetics Alexander Gordeev
2015-05-29 9:53 ` [PATCH v2 5/9] rcu: Limit rcu_state::levelcnt[] to RCU_NUM_LVLS items Alexander Gordeev
2015-05-29 9:53 ` [PATCH v2 6/9] rcu: Limit rcu_capacity[] size " Alexander Gordeev
2015-05-29 9:53 ` [PATCH v2 7/9] rcu: Remove unnecessary fields from rcu_state structure Alexander Gordeev
2015-05-29 9:53 ` [PATCH v2 8/9] rcu: Limit count of static data to the number of RCU levels Alexander Gordeev
2015-05-29 9:53 ` [PATCH v2 9/9] rcu: Simplify arithmetic to calculate number of RCU nodes Alexander Gordeev
2015-06-01 18:58 ` [PATCH v2 0/9] rcu: Cleanup RCU tree initialization 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=20150602123740.GF5989@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=agordeev@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rostedt@goodmis.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.