Subject: Re: BUG: soft lockup detected on CPU#0! (2.6.18.2 plus hacks)

From: Jarek Poplawski <[email-masked]>
Date: Fri, 5 Jan 2007 07:38:44 +0100

On Thu, Jan 04, 2007 at 12:33:33PM -0800, David Miller wrote:
> From: Herbert Xu <[email-masked]>
> Date: Thu, 04 Jan 2007 17:26:27 +1100
> 
> > David Stevens <[email-masked]> wrote:
> > >        You're right, I don't know whether it'll fix the problem Ben saw
> > > or not, but it looks like the original code can do a receive before the
> > > in_device is fully initialized, and that, of course, is bad.
> > >        If the device for ip_rcv() is not the same one we were
> > > initializing when the receive interrupted, then the patch should have
> > > no effect either way -- I don't think it'll hide other problems.
> > >        If it's hard to reproduce (which I guess is true), then you're
> > > right, no soft lockup doesn't really tell us if it's fixed or not.
> > 
> > Actually I missed your point that the multicast locks aren't even
> > initialised at that point.  So this does explain the soft lock-up
> > and therefore your patch is clearly the correct solution.
> 
> I agree too, therefore I've added David's patch as below.
> 
> I'll push this to the -stable branches as well.  This fix is
> correct even if it does not entirely clear up the soft lockup
> bug being discussed in this thread, but I think it will :-)

After rethinking I came to similar conclusion.  I've
thought the changes are done only to fix this particular
bug but now I see the previous order wasn't right
particularly considering RCU.

So, I apologize to David L Stevens for my harsh words.

I'd only suggest to change "goto out;" to
"return NULL;" at the end of inetdev_init because
now RCU is engaged unnecessarily.

Regards,
Jarek P.