• John Ogness's avatar
    printk: add functions to prefer direct printing · 2bb2b7b5
    John Ogness authored
    Once kthread printing is available, console printing will no longer
    occur in the context of the printk caller. However, there are some
    special contexts where it is desirable for the printk caller to
    directly print out kernel messages. Using pr_flush() to wait for
    threaded printers is only possible if the caller is in a sleepable
    context and the kthreads are active. That is not always the case.
    
    Introduce printk_prefer_direct_enter() and printk_prefer_direct_exit()
    functions to explicitly (and globally) activate/deactivate preferred
    direct console printing. The term "direct console printing" refers to
    printing to all enabled consoles from the context of the printk
    caller. The term "prefer" is used because this type of printing is
    only best effort. If the console is currently locked or other
    printers are already actively printing, the printk caller will need
    to rely on the other contexts to handle the printing.
    
    This preferred direct printing is how all printing has been handled
    until now (unless it was explicitly deferred).
    
    When kthread printing is introduced, there may be some unanticipated
    problems due to kthreads being unable to flush important messages.
    In order to minimize such risks, preferred direct printing is
    activated for the primary important messages when the system
    experiences general types of major errors. These are:
    
     - emergency reboot/shutdown
     - cpu and rcu stalls
     - hard and soft lockups
     - hung tasks
     - warn
     - sysrq
    
    Note that since kthread printing does not yet exist, no behavior
    changes result from this commit. This is only implementing the
    counter and marking the various places where preferred direct
    printing is active.
    Signed-off-by: default avatarJohn Ogness <john.ogness@linutronix.de>
    Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    Acked-by: Paul E. McKenney <paulmck@kernel.org> # for RCU
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Link: https://lore.kernel.org/r/20220421212250.565456-13-john.ogness@linutronix.de
    2bb2b7b5
reboot.c 21.7 KB