On Tue, Sep 18, 2012 at 01:43:44AM +0800, Chuansheng Liu wrote: > Like 8250 driver, when pstore is registered as a console, > to avoid recursive spinlocks when panic happening, change the > spin_lock_irqsave to spin_trylock_irqsave when oops_in_progress > is true. > > Signed-off-by: liu chuansheng <chuansheng....@intel.com> > --- > fs/pstore/platform.c | 7 ++++++- > 1 files changed, 6 insertions(+), 1 deletions(-) > > diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c > index 29996e8..cbcb5fc 100644 > --- a/fs/pstore/platform.c > +++ b/fs/pstore/platform.c > @@ -164,7 +164,12 @@ static void pstore_console_write(struct console *con, > const char *s, unsigned c) > > if (c > psinfo->bufsize) > c = psinfo->bufsize; > - spin_lock_irqsave(&psinfo->buf_lock, flags); > + > + if (oops_in_progress) { > + if (!spin_trylock_irqsave(&psinfo->buf_lock, flags)) > + break;
Mm... why break? Like 8250, in this case it's better still log the console. That is, something along these lines: bool locked = 1; if (oops_in_progress) locked = spin_trylock_irqsave(&psinfo->buf_lock, flags); else spin_lock_irqsave(&psinfo->buf_lock, flags); memcpy(psinfo->buf, s, c); psinfo->write(PSTORE_TYPE_CONSOLE, 0, NULL, 0, c, psinfo); if (locked) spin_unlock_irqrestore(&psinfo->buf_lock, flags); Thanks, Anton. > + } else > + spin_lock_irqsave(&psinfo->buf_lock, flags); > memcpy(psinfo->buf, s, c); > psinfo->write(PSTORE_TYPE_CONSOLE, 0, NULL, 0, c, psinfo); > spin_unlock_irqrestore(&psinfo->buf_lock, flags); > -- > 1.7.0.4 -- 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/