Messages in this thread Patch in this message | | | Date | Wed, 8 Mar 2023 14:15:48 +0100 | From | Petr Mladek <> | 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
| |