• John Ogness's avatar
    printk: Add helper for flush type logic · 6690d6b5
    John Ogness authored
    There are many call sites where console flushing occur.
    Depending on the system state and types of consoles, the flush
    methods to use are different. A flush call site generally must
    consider:
    
    	@have_boot_console
    	@have_nbcon_console
    	@have_legacy_console
    	@legacy_allow_panic_sync
    	is_printk_preferred()
    
    and take into account the current CPU state:
    
    	NBCON_PRIO_NORMAL
    	NBCON_PRIO_EMERGENCY
    	NBCON_PRIO_PANIC
    
    in order to decide if it should:
    
    	flush nbcon directly via atomic_write() callback
    	flush legacy directly via console_unlock
    	flush legacy via offload to irq_work
    
    All of these call sites use their own logic to make this
    decision, which is complicated and error prone. Especially
    later when two more flush methods will be introduced:
    
    	flush nbcon via offload to kthread
    	flush legacy via offload to kthread
    
    Introduce a new internal struct console_flush_type that specifies
    which console flushing methods should be used in the context of
    the caller.
    
    Introduce a helper function to fill out console_flush_type to
    be used for flushing call sites.
    
    Replace the logic of all flushing call sites to use the new
    helper.
    
    This change standardizes behavior, leading to both fixes and
    optimizations across various call sites. For instance, in
    console_cpu_notify(), the new logic ensures that nbcon consoles
    are flushed when they aren’t managed by the legacy loop.
    Similarly, in console_flush_on_panic(), the system no longer
    needs to flush nbcon consoles if none are present.
    Signed-off-by: default avatarJohn Ogness <john.ogness@linutronix.de>
    Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    Link: https://lore.kernel.org/r/20240820063001.36405-31-john.ogness@linutronix.de
    [pmladek@suse.com: Updated the commit message.]
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    6690d6b5
internal.h 7.61 KB