On Mon, 12 May 2014 17:41:54 -0700 Derek Basehore <dbaseh...@chromium.org> wrote:
> If we don't call mutex_acquire at the beginning of console_unblank, we can run > into a lockup on the logbuf_lock between console_unlock and printk during > panic. > What happens in console_unlock is: > > -locks logbuf_lock > -calls mutex_release > -which calls printk > -which locks logbuf_lock > > This fixes the problem by calling console_trylock (which calls mutex_acquire) > instead of directly accessing the semaphore in console_unblank and moves the > mutex_release to after we unlock logbuf_lock in console_unlock (interrupts are > still disabled). Please take a look at linux-next, where this code has changed a lot. > index 7228258..c599ab5 100644 > --- a/kernel/printk/printk.c > +++ b/kernel/printk/printk.c > @@ -2084,7 +2084,6 @@ skip: > local_irq_restore(flags); > } > console_locked = 0; > - mutex_release(&console_lock_dep_map, 1, _RET_IP_); > > /* Release the exclusive_console once it is used */ > if (unlikely(exclusive_console)) > @@ -2092,6 +2091,7 @@ skip: > > raw_spin_unlock(&logbuf_lock); > > + mutex_release(&console_lock_dep_map, 1, _RET_IP_); > up(&console_sem); > > /* > @@ -2137,7 +2137,7 @@ void console_unblank(void) > * oops_in_progress is set to 1.. > */ > if (oops_in_progress) { > - if (down_trylock(&console_sem) != 0) > + if (!console_trylock()) > return; > } else > console_lock(); Although the code is quite different, an equivalent change appears to have been made already. I'm not sure that bugfix was intentional ;) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/