Re: [PATCH v6 2/2] printk: Make printing of spin_dump() deferred to avoid a deadlock

From: Sergey Senozhatsky
Date: Sun Mar 13 2016 - 22:39:55 EST


Hi,

On (03/14/16 11:30), Byungchul Park wrote:
[..]
> > so can it be
> >
> > vprintk_emit()
> > __spin_dump_deferred()
> > vprintk_deferred()
> > vprintk_emit()
> > __spin_dump_deferred()
> ^^^
> can be caused by raw_spin_lock(logbug_lock)
>
> > vprintk_deferred()
>
> Yes, it can happen by raw_spin_lock(logbuf_lock) to print warning or error
> message. Are you worrying about an infinite recursion?

yes.

> 1. In the case printing warning, eventually it can fill the buffer without
> actual printing using console.

so the worry is that the CPU that spins on __spin_dump_deferred() has IRQs
disabled and `printk_pending' bit set; but IRQ may never be enabled on this
CPU.

> 2. In the case printing error, the infinite recursion can be prevented by
> debug_locks_off().
>
> Therefore, no problem.

-ss