lib/dump_stack: move cpu lock to printk.c
authorJohn Ogness <john.ogness@linutronix.de>
Thu, 17 Jun 2021 09:50:50 +0000 (11:56 +0206)
committerPetr Mladek <pmladek@suse.com>
Tue, 22 Jun 2021 07:56:10 +0000 (09:56 +0200)
commit766c268bc6d39b8124e50d075a36b8a3305bc8e2
treedafc8ab972a947740d23a339be866378bd7902dc
parentacebb5597ff182e52a225400a459052a70dae706
lib/dump_stack: move cpu lock to printk.c

dump_stack() implements its own cpu-reentrant spinning lock to
best-effort serialize stack traces in the printk log. However,
there are other functions (such as show_regs()) that can also
benefit from this serialization.

Move the cpu-reentrant spinning lock (cpu lock) into new helper
functions printk_cpu_lock_irqsave()/printk_cpu_unlock_irqrestore()
so that it is available for others as well. For !CONFIG_SMP the
cpu lock is a NOP.

Note that having multiple cpu locks in the system can easily
lead to deadlock. Code needing a cpu lock should use the
printk cpu lock, since the printk cpu lock could be acquired
from any code and any context.

Also note that it is not necessary for a cpu lock to disable
interrupts. However, in upcoming work this cpu lock will be used
for emergency tasks (for example, atomic consoles during kernel
crashes) and any interruptions while holding the cpu lock should
be avoided if possible.

Signed-off-by: John Ogness <john.ogness@linutronix.de>
Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Reviewed-by: Petr Mladek <pmladek@suse.com>
[pmladek@suse.com: Backported on top of 5.13-rc1.]
Signed-off-by: Petr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20210617095051.4808-2-john.ogness@linutronix.de
include/linux/printk.h
kernel/printk/printk.c
lib/dump_stack.c