Re: [PATCH printk 4/5] printk: remove logbuf_lock, add syslog_lock
From: Sergey Senozhatsky
Date: Thu Sep 24 2020 - 04:45:46 EST
On (20/09/22 17:44), John Ogness wrote:
[..]
> void printk_safe_flush_on_panic(void)
> {
> - /*
> - * Make sure that we could access the main ring buffer.
> - * Do not risk a double release when more CPUs are up.
> - */
> - if (raw_spin_is_locked(&logbuf_lock)) {
> - if (num_online_cpus() > 1)
> - return;
> -
> - debug_locks_off();
> - raw_spin_lock_init(&logbuf_lock);
If we panic() with syslog_lock locked then we need to zap syslog_lock
and disable debug_locks for kmsg_dump() to succeed. Otherwise panic()
may deadlock:
syslog_lock_irq()
-> NMI
panic()
...
printk_safe_flush_on_panic();
kmsg_dump(KMSG_DUMP_PANIC); // syslog_lock_irqsave(flags)
...
Did I miss the point where we make sure that kmsg_dump() will not
deadlock?
-ss