From: John Ogness <john.ogness@linutronix.de>
To: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH printk v4 09/17] printk: nbcon: Rely on kthreads for normal operation
Date: Tue, 27 Aug 2024 23:19:36 +0206 [thread overview]
Message-ID: <871q298y9r.fsf@jogness.linutronix.de> (raw)
In-Reply-To: <Zs31xM0Nn0hEb74O@pathway.suse.cz>
On 2024-08-27, Petr Mladek <pmladek@suse.com> wrote:
>> --- a/kernel/printk/printk.c
>> +++ b/kernel/printk/printk.c
>> @@ -2749,6 +2753,10 @@ void resume_console(void)
>> */
>> synchronize_srcu(&console_srcu);
>>
>> + printk_get_console_flush_type(&ft);
>> + if (ft.nbcon_offload)
>> + nbcon_kthreads_wake();
>
> Who would flush the nbcon consoles in the following case?
>
> ft.nbcon_atomic == true && ft.legacy_direct == false
>
> pr_flush() won't call the legacy loop in this case.
>
> We should probably update pr_flush() to call nbcon_atomic_flush_pending()
> in this case.
Agreed.
>> @@ -3387,9 +3405,25 @@ EXPORT_SYMBOL(console_stop);
>>
>> void console_start(struct console *console)
>> {
>> + struct console_flush_type ft;
>> + bool is_nbcon;
>> +
>> console_list_lock();
>> console_srcu_write_flags(console, console->flags | CON_ENABLED);
>> + is_nbcon = console->flags & CON_NBCON;
>> console_list_unlock();
>> +
>> + /*
>> + * Ensure that all SRCU list walks have completed. The related
>> + * printing context must be able to see it is enabled so that
>> + * it is guaranteed to wake up and resume printing.
>> + */
>> + synchronize_srcu(&console_srcu);
>> +
>> + printk_get_console_flush_type(&ft);
>> + if (is_nbcon && ft.nbcon_offload)
>> + nbcon_kthread_wake(console);
>
> Same here.
>
>
>> __pr_flush(console, 1000, true);
Agreed, via adding nbcon_atomic_flush_pending() within __pr_flush().
>> @@ -4629,8 +4665,13 @@ EXPORT_SYMBOL_GPL(kmsg_dump_rewind);
>> */
>> void console_try_replay_all(void)
>> {
>> + struct console_flush_type ft;
>> +
>> + printk_get_console_flush_type(&ft);
>> if (console_trylock()) {
>> __console_rewind_all();
>> + if (ft.nbcon_offload)
>> + nbcon_kthreads_wake();
>
> And here. We in this case, we should likely call add here:
>
> if (ft.nbcon_atomic)
> nbcon_atomic_flush_pending()
Agreed.
You once mentioned having a generic flush function that simply evaluates
the flush types and then executes them appropriately. It would be nice
to get rid of all/most these individual eval/flush snippets.
At a quick glance, the significant variations are:
- for legacy_direct: console_trylock() vs. console_lock() usage
- only performing direct/atomic flushing
- only performing offload flushing
- vprintk_emit(), console_start(), nbcon_device_release() are special
The first three variations could all be covered by arguments to the
generic flush function:
void console_flush(bool do_direct, bool do_offload, bool may_sleep);
or by packing it into bits/macros for readability, with call examples
such as:
console_flush(CON_FLUSH_OFFLOAD);
console_flush(CON_FLUSH_DIRECT | CON_FLUSH_OFFLOAD);
console_flush(CON_FLUSH_DIRECT | CON_FLUSH_MAY_SLEEP);
Such a function would have avoided the issues you found in this review.
John Ogness
next prev parent reply other threads:[~2024-08-27 21:13 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-27 4:43 [PATCH printk v4 00/17] add threaded printing + the rest John Ogness
2024-08-27 4:43 ` [PATCH printk v4 01/17] printk: nbcon: Add function for printers to reacquire ownership John Ogness
2024-08-27 11:57 ` Petr Mladek
2024-08-27 4:43 ` [PATCH printk v4 02/17] printk: Fail pr_flush() if before SYSTEM_SCHEDULING John Ogness
2024-08-27 12:00 ` Petr Mladek
2024-08-27 4:43 ` [PATCH printk v4 03/17] printk: Flush console on unregister_console() John Ogness
2024-08-27 4:43 ` [PATCH printk v4 04/17] printk: nbcon: Add context to usable() and emit() John Ogness
2024-08-27 12:21 ` Petr Mladek
2024-08-27 4:43 ` [PATCH printk v4 05/17] printk: nbcon: Init @nbcon_seq to highest possible John Ogness
2024-08-27 12:29 ` Petr Mladek
2024-08-27 4:43 ` [PATCH printk v4 06/17] printk: nbcon: Introduce printer kthreads John Ogness
2024-08-27 14:48 ` Petr Mladek
2024-08-28 17:33 ` John Ogness
2024-08-27 4:43 ` [PATCH printk v4 07/17] printk: nbcon: Relocate nbcon_atomic_emit_one() John Ogness
2024-08-27 14:50 ` Petr Mladek
2024-08-27 4:43 ` [PATCH printk v4 08/17] printk: nbcon: Use thread callback if in task context for legacy John Ogness
2024-08-27 15:09 ` Petr Mladek
2024-08-27 4:43 ` [PATCH printk v4 09/17] printk: nbcon: Rely on kthreads for normal operation John Ogness
2024-08-27 15:50 ` Petr Mladek
2024-08-27 21:13 ` John Ogness [this message]
2024-08-27 4:43 ` [PATCH printk v4 10/17] printk: Provide helper for message prepending John Ogness
2024-08-27 4:43 ` [PATCH printk v4 11/17] printk: nbcon: Show replay message on takeover John Ogness
2024-08-27 4:43 ` [PATCH printk v4 12/17] proc: consoles: Add notation to c_start/c_stop John Ogness
2024-08-27 4:43 ` [PATCH printk v4 13/17] proc: Add nbcon support for /proc/consoles John Ogness
2024-08-27 4:43 ` [PATCH printk v4 14/17] tty: sysfs: Add nbcon support for 'active' John Ogness
2024-08-27 4:43 ` [PATCH printk v4 15/17] printk: Implement legacy printer kthread for PREEMPT_RT John Ogness
2024-08-27 4:43 ` [PATCH printk v4 16/17] printk: nbcon: Assign nice -20 for printing threads John Ogness
2024-08-27 4:43 ` [PATCH printk v4 17/17] printk: Avoid false positive lockdep report for legacy printing John Ogness
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871q298y9r.fsf@jogness.linutronix.de \
--to=john.ogness@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=senozhatsky@chromium.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.