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