On Tue, Apr 05, 2022 at 03:31:32PM +0206, John Ogness wrote: > 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 is currently > handled (unless 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: John Ogness <john.ogness@xxxxxxxxxxxxx>