Re: Linux 3.0-rc5 doesnt boot and hangs at rcu_sched_state ()
From: Florian Mickler
Date: Tue Jul 12 2011 - 17:13:58 EST
On Mon, 11 Jul 2011 07:17:27 -0700
"Paul E. McKenney" <paulmck@xxxxxxxxxxxxxxxxxx> wrote:
> > >> Please give me some time as im away. i will test the patch and get
> > >> back to you by today evening .
> > >> Warm Regards
> > >> Ravi Kulkarni.
> > >
> > > Just as well -- I fat-fingered the patch creation. :-/
> > >
> > > Please see below for the real patch.
> > >
> > > Thanx, Paul
> > >
> > > ------------------------------------------------------------------------
> > >
> > > rcu: Prevent RCU callbacks from executing during early boot
> > >
> > > Under some rare but real combinations of configuration parameters, RCU
> > > callbacks are posted during early boot that use kernel facilities that
> > > are not yet initialized. Therefore, when these callbacks are invoked,
> > > hard hangs and crashes ensue. This commit therefore prevents RCU
> > > callbacks from being invoked until after the scheduler is up and running.
> > >
> > > It might well turn out that a better approach is to identify the specific
> > > RCU callbacks that are causing this problem, but that discussion will
> > > wait until such time as someone really needs an RCU callback to be
> > > invoked during early boot.
> > >
> > > Reported-by: julie Sullivan <kernelmail.jms@xxxxxxxxx>
> > > Tested-by: julie Sullivan <kernelmail.jms@xxxxxxxxx>
> > > Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxxxxxxxxxx>
> > >
> > > diff --git a/kernel/rcutree.c b/kernel/rcutree.c
> > > index 7e59ffb..4c0210f 100644
> > > --- a/kernel/rcutree.c
> > > +++ b/kernel/rcutree.c
> > > @@ -1467,7 +1467,7 @@ static void rcu_process_callbacks(struct softirq_action *unused)
> > > */
> > > static void invoke_rcu_callbacks(struct rcu_state *rsp, struct rcu_data *rdp)
> > > {
> > > - if (likely(!rsp->boost)) {
> > > + if (likely(rcu_scheduler_active && !rsp->boost)) {
> > > rcu_do_batch(rsp, rdp);
> > > return;
> > > }
> > > diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
> > > index 14dc7dd..ca3c6dc 100644
> > > --- a/kernel/rcutree_plugin.h
> > > +++ b/kernel/rcutree_plugin.h
> > > @@ -1703,7 +1703,7 @@ static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags)
> > >
> > > static void invoke_rcu_callbacks_kthread(void)
> > > {
> > > - WARN_ON_ONCE(1);
> > > + WARN_ON_ONCE(rcu_scheduler_active);
> > > }
> > >
> > > static void rcu_preempt_boost_start_gp(struct rcu_node *rnp)
> > >
> >
> > The above patch fixes the bug and now 3.0.rc5 is bootable :). thanks.
>
> Thank you, Ravi! I have added your Tested-by and will now push this
> upstream.
>
> Thanx, Paul
>
> > maciej rutecki,
> >
> > can we close the the below bugzilla entry ?
> > https://bugzilla.kernel.org/show_bug.cgi?id=38732
> >
> > Warm regards,
> > Ravi Kulkarni.
I added a link to the bugzilla and put it in the 'patch available'
state.
The rule is to close the bug as soon as the patch hit's
mainline (i.e. Linus' tree). If it has a bugzilla link in the
changelog, I will post an automatic notification to that bug as soon as
Linus releases a kernel with that patch. Else the 'regression tracking
team' will have to manually dig through the bugreport or find a note by
someone involved in the bugzilla to that effect.
Regards,
Flo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/