mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 16:12:59 +02:00
printk: Add is_printk_legacy_deferred()
If printk has been explicitly deferred or is called from NMI context, legacy console printing must be deferred to an irq_work context. Introduce a helper function is_printk_legacy_deferred() for a CPU to query if it must defer legacy console printing. In follow-up commits this helper will be needed at other call sites as well. Signed-off-by: John Ogness <john.ogness@linutronix.de> Reviewed-by: Petr Mladek <pmladek@suse.com> Link: https://lore.kernel.org/r/20240820063001.36405-24-john.ogness@linutronix.de Signed-off-by: Petr Mladek <pmladek@suse.com>
This commit is contained in:
parent
c158834b22
commit
70411bf8d2
|
|
@ -75,6 +75,7 @@ bool printk_percpu_data_ready(void);
|
|||
} while (0)
|
||||
|
||||
void defer_console_output(void);
|
||||
bool is_printk_legacy_deferred(void);
|
||||
|
||||
u16 printk_parse_prefix(const char *text, int *level,
|
||||
enum printk_info_flags *flags);
|
||||
|
|
@ -138,6 +139,7 @@ static inline bool console_is_usable(struct console *con, short flags)
|
|||
#define printk_safe_exit_irqrestore(flags) local_irq_restore(flags)
|
||||
|
||||
static inline bool printk_percpu_data_ready(void) { return false; }
|
||||
static inline bool is_printk_legacy_deferred(void) { return false; }
|
||||
static inline u64 nbcon_seq_read(struct console *con) { return 0; }
|
||||
static inline void nbcon_seq_force(struct console *con, u64 seq) { }
|
||||
static inline bool nbcon_alloc(struct console *con) { return false; }
|
||||
|
|
|
|||
|
|
@ -38,6 +38,15 @@ void __printk_deferred_exit(void)
|
|||
__printk_safe_exit();
|
||||
}
|
||||
|
||||
bool is_printk_legacy_deferred(void)
|
||||
{
|
||||
/*
|
||||
* The per-CPU variable @printk_context can be read safely in any
|
||||
* context. CPU migration is always disabled when set.
|
||||
*/
|
||||
return (this_cpu_read(printk_context) || in_nmi());
|
||||
}
|
||||
|
||||
asmlinkage int vprintk(const char *fmt, va_list args)
|
||||
{
|
||||
#ifdef CONFIG_KGDB_KDB
|
||||
|
|
@ -50,7 +59,7 @@ asmlinkage int vprintk(const char *fmt, va_list args)
|
|||
* Use the main logbuf even in NMI. But avoid calling console
|
||||
* drivers that might have their own locks.
|
||||
*/
|
||||
if (this_cpu_read(printk_context) || in_nmi())
|
||||
if (is_printk_legacy_deferred())
|
||||
return vprintk_deferred(fmt, args);
|
||||
|
||||
/* No obstacles. */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user