On 2020-09-24, Sergey Senozhatsky <[email protected]> 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?
You are correct. Thanks. @clear_seq should either become atomic64 or kmsg_dump() should start from the oldest available message (seq=0). John Ogness

