Subject: Re: linux-next: Tree for April 14 (Call-traces: RCU/ACPI/WQ related?)

From: "Paul E. McKenney" <[email-masked]>
Date: Sun, 24 Apr 2011 09:43:31 -0700

On Sun, Apr 24, 2011 at 11:36:44AM +0200, Sedat Dilek wrote:
> On Sun, Apr 24, 2011 at 8:27 AM, Paul E. McKenney
> <[email-masked]> wrote:

[ . . . ]

> > OK, this looks unrelated, but just in case, could you please try it
> > again with the following patch?  (Not mainlinable, debug only.)
> >
> > Also, it does look like you are still seeing a grace-period hang.
> > Could you please send the output of the script?  Same one as last time.
> >
> >                                                        Thanx, Paul
> >
> > ------------------------------------------------------------------------
> >
> >  debugobjects.c |    8 +++++---
> >  1 file changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/lib/debugobjects.c b/lib/debugobjects.c
> > index 9d86e45..10a7c7a 100644
> > --- a/lib/debugobjects.c
> > +++ b/lib/debugobjects.c
> > @@ -289,10 +289,12 @@ static void debug_object_is_on_stack(void *addr, int onstack)
> >                return;
> >
> >        limit++;
> > -       if (is_on_stack)
> > +       if (is_on_stack) {
> > +               struct rcu_head *p = (struct rcu_head *)addr;
> >                printk(KERN_WARNING
> > -                      "ODEBUG: object is on stack, but not annotated\n");
> > -       else
> > +                      "ODEBUG: object is on stack, but not annotated: %p\n",
> > +                      p->func);
> > +       } else
> >                printk(KERN_WARNING
> >                       "ODEBUG: object is not on stack, but annotated\n");
> >        WARN_ON(1);
> >
> 
> Somehow your attached patch was not applicable.
> As the changes were a few lines I applied it by myself.
> Attached are log, dmesg and patches (orig + mine)

Hmmm...  Does 0xc10231a1 correspond to a function in your build?  If so,
could you please let me know which one?

OK, so according to "ps" the per-CPU kthread is runnable, but it appears
to never run.  You only have one CPU, so it cannot be waiting due to
running on the wrong CPU.  The only other loop is in wait_event(), and
that code looks good -- besides, if wait_event() was broken, we would
be seeing breakage everywhere.

Peter, any thoughts on what I might have done wrong to get the scheduler
into a state where it was ignoring a runnable realtime task?

							Thanx, Paul