• John Ogness's avatar
    lib/dump_stack: move cpu lock to printk.c · 766c268b
    John Ogness authored
    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: default avatarJohn Ogness <john.ogness@linutronix.de>
    Reviewed-by: default avatarSergey Senozhatsky <senozhatsky@chromium.org>
    Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    [pmladek@suse.com: Backported on top of 5.13-rc1.]
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Link: https://lore.kernel.org/r/20210617095051.4808-2-john.ogness@linutronix.de
    766c268b
printk.c 91.4 KB