Re: [PATCH 1/3] printk: Release console_sem after logbuf_lock

Peter Zijlstra
2011-06-09T20:51:08Z

On Thu, 2011-06-09 at 22:27 +0200, Ingo Molnar wrote:

> > > @@ -1271,8 +1273,8 @@ void console_unlock(void)
> > > if (unlikely(exclusive_console))
> > > exclusive_console = NULL;
> > >
> > > - up(&console_sem);
> > > spin_unlock_irqrestore(&logbuf_lock, flags);
> > > + up(&console_sem);
> > > if (wake_klogd)
> > > wake_up_klogd();
> > > }
> >
> > I have a horrible feeling that I put the up() inside logbuf_lock for
> > Special And Cunning Reasons. But I'm struggling to work out what they
> > might have been and my archives only go back to October 2000(!).
> >
> > Hate it when that happens.
>
> Heh, here's what i told Peter two days ago when i saw that chunk:
>
> => Subject: printk: Release console_sem after logbuf_lock
> => i have some vague memories about some sort of complication in that area ...
> => but don't remember the specifics
> => only a 'there be dragons' mental marker

Right, my reply was that I couldn't convince myself unlock order could
make a difference, but clearly I can easily have missed something
subtle.

> and i have to say that when i found a boot lockup during testing i
> was not surprised very much :)

But you found a lockup on the second patch, not this one.

Also, this patch is important for #3, where we want to take logbuf_lock
under the semaphore internal lock, that too would preclude us doing that
up() in the old location.