[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZAiKhAA37/jehmD7@alley>
Date: Wed, 8 Mar 2023 14:15:48 +0100
From: Petr Mladek <pmladek@...e.com>
To: John Ogness <john.ogness@...utronix.de>
Cc: Sergey Senozhatsky <senozhatsky@...omium.org>,
Steven Rostedt <rostedt@...dmis.org>,
Thomas Gleixner <tglx@...utronix.de>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH printk v1 03/18] printk: Consolidate console deferred
printing
On Thu 2023-03-02 21:02:03, John Ogness wrote:
> Printig to consoles can be deferred for several reasons:
>
> - explicitly with printk_deferred()
> - printk() in NMI context
> - recursive printk() calls
>
> The current implementation is not consistent. For printk_deferred(),
> irq work is scheduled twice. For NMI und recursive, panic CPU
> suppression and caller delays are not properly enforced.
>
> Correct these inconsistencies by consolidating the deferred printing
> code so that vprintk_deferred() is the toplevel function for
> deferred printing and vprintk_emit() will perform whichever irq_work
> queueing is appropriate.
>
> Also add kerneldoc for wake_up_klogd() and defer_console_output() to
> clarify their differences and appropriate usage.
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -2321,7 +2321,10 @@ asmlinkage int vprintk_emit(int facility, int level,
> preempt_enable();
> }
>
> - wake_up_klogd();
> + if (in_sched)
> + defer_console_output();
> + else
> + wake_up_klogd();
Nit: I would add an empty line here. Or I would move this up into the
previous if (in_sched()) condition.
> return printed_len;
> }
> EXPORT_SYMBOL(vprintk_emit);
> @@ -3811,11 +3814,30 @@ static void __wake_up_klogd(int val)
> preempt_enable();
> }
>
> +/**
> + * wake_up_klogd - Wake kernel logging daemon
> + *
> + * Use this function when new records have been added to the ringbuffer
> + * and the console printing for those records is handled elsewhere. In
"elsewhere" is ambiguous. I would write:
"and the console printing for those records maybe handled in this context".
> + * this case only the logging daemon needs to be woken.
> + *
> + * Context: Any context.
> + */
> void wake_up_klogd(void)
> {
> __wake_up_klogd(PRINTK_PENDING_WAKEUP);
> }
>
Anyway, I like this change.
Best Regards,
Petr
Powered by blists - more mailing lists