From: Petr Mladek <pmladek@suse.com>
To: John Ogness <john.ogness@linutronix.de>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [PATCH printk v5 11/30] nbcon: Provide functions for drivers to acquire console for non-printing
Date: Mon, 20 May 2024 14:13:14 +0200 [thread overview]
Message-ID: <Zks-WkoTmAVFBgoP@pathway.suse.cz> (raw)
In-Reply-To: <20240502213839.376636-12-john.ogness@linutronix.de>
On Thu 2024-05-02 23:44:20, John Ogness wrote:
> Provide functions nbcon_driver_try_acquire() and
> nbcon_driver_release() to allow drivers to acquire the nbcon
> console and mark it unsafe for handover/takeover.
I would prefer to rename 'driver' to 'device' to keep the existing
naming scheme in struct console. The API will be used to
synchronize the 'device' element.
> These functions are to be used by nbcon drivers when performing
> non-printing activities that should be synchronized with their
> atomic_write() callback.
I am still trying to create a mental model around the synchronization
between the device-specific locks and nbcon context. Also it took
me some time to realize that just disambling the migration is
perfectly fine here.
I propose a bit extended commit message:
<proposal>
Subject: nbcon: Add API to acquire context for non-printing operations
Provide functions nbcon_device_try_acquire() and
nbcon_device_release() which will try to acquire the nbcon console
ownership with NBCON_PRIO_NORMAL and mark it unsafe for handover/takeover.
These functions are to be used together with the device-specific
locking when performing non-printing activities on the console device.
They will allow synchronization against atomic_write() callback which
will be serialized, for higher priority contexts, only by acquiring
the console context ownership.
Pitfalls:
The API requires to be called in a context with a disabled migration
because it uses per-CPU variables internally.
The context is set unsafe for a takeover all the time. It guarantees
full serialization against any atomic_write() caller except for
the final flush in panic() which might try an unsafe takeover.
</proposal>
> --- a/include/linux/console.h
> +++ b/include/linux/console.h
> @@ -304,6 +304,7 @@ struct nbcon_write_context {
> *
> * @nbcon_state: State for nbcon consoles
> * @nbcon_seq: Sequence number of the next record for nbcon to print
> + * @nbcon_driver_ctxt: Context available for driver non-printing operations
This provides a context for "@device".
We should call this "@nbcon_device_ctxt" to avoid confusion.
> * @pbufs: Pointer to nbcon private buffer
> */
> struct console {
> @@ -399,6 +400,7 @@ struct console {
>
> atomic_t __private nbcon_state;
> atomic_long_t __private nbcon_seq;
> + struct nbcon_context __private nbcon_driver_ctxt;
> struct printk_buffers *pbufs;
> };
>
> diff --git a/include/linux/printk.h b/include/linux/printk.h
> index d8b3f51d9e98..d0a1106388d1 100644
> --- a/include/linux/printk.h
> +++ b/include/linux/printk.h
> @@ -9,6 +9,8 @@
> #include <linux/ratelimit_types.h>
> #include <linux/once_lite.h>
>
> +struct console;
> +
> extern const char linux_banner[];
> extern const char linux_proc_banner[];
>
> @@ -193,6 +195,8 @@ void show_regs_print_info(const char *log_lvl);
> extern asmlinkage void dump_stack_lvl(const char *log_lvl) __cold;
> extern asmlinkage void dump_stack(void) __cold;
> void printk_trigger_flush(void);
> +extern bool nbcon_driver_try_acquire(struct console *con);
> +extern void nbcon_driver_release(struct console *con);
Similar here:
s/driver/device/
> #else
> static inline __printf(1, 0)
> int vprintk(const char *s, va_list args)
With all the renames and updated commit message:
Reviewed-by: Petr Mladek <pmladek@suse.com>
Best Regards,
Petr
next prev parent reply other threads:[~2024-05-20 12:13 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-02 21:38 [PATCH printk v5 00/30] wire up write_atomic() printing John Ogness
2024-05-02 21:38 ` [PATCH printk v5 01/30] printk: Add notation to console_srcu locking John Ogness
2024-05-07 12:16 ` Petr Mladek
2024-05-02 21:38 ` [PATCH printk v5 02/30] printk: Properly deal with nbcon consoles on seq init John Ogness
2024-05-02 21:38 ` [PATCH printk v5 03/30] printk: nbcon: Remove return value for write_atomic() John Ogness
2024-05-02 21:38 ` [PATCH printk v5 04/30] printk: Check printk_deferred_enter()/_exit() usage John Ogness
2024-05-02 21:38 ` [PATCH printk v5 05/30] printk: nbcon: Add detailed doc for write_atomic() John Ogness
2024-05-07 12:26 ` Petr Mladek
2024-05-02 21:38 ` [PATCH printk v5 06/30] printk: nbcon: Add callbacks to synchronize with driver John Ogness
2024-05-17 13:31 ` Petr Mladek
2024-05-17 14:00 ` John Ogness
2024-05-17 14:40 ` Petr Mladek
2024-05-02 21:38 ` [PATCH printk v5 07/30] printk: nbcon: Use driver synchronization while (un)registering John Ogness
2024-05-06 10:27 ` John Ogness
2024-05-17 13:44 ` Petr Mladek
2024-05-02 21:38 ` [PATCH printk v5 08/30] serial: core: Provide low-level functions to lock port John Ogness
2024-05-02 21:38 ` [PATCH printk v5 09/30] serial: core: Introduce wrapper to set @uart_port->cons John Ogness
2024-05-03 8:09 ` Théo Lebrun
2024-05-04 16:08 ` Greg Kroah-Hartman
2024-05-17 14:51 ` Petr Mladek
2024-05-02 21:38 ` [PATCH printk v5 10/30] console: Improve console_srcu_read_flags() comments John Ogness
2024-05-17 14:55 ` Petr Mladek
2024-05-02 21:38 ` [PATCH printk v5 11/30] nbcon: Provide functions for drivers to acquire console for non-printing John Ogness
2024-05-06 10:29 ` John Ogness
2024-05-20 12:13 ` Petr Mladek [this message]
2024-05-02 21:38 ` [PATCH printk v5 12/30] serial: core: Implement processing in port->lock wrapper John Ogness
2024-05-04 16:08 ` Greg Kroah-Hartman
2024-05-20 12:22 ` Petr Mladek
2024-05-02 21:38 ` [PATCH printk v5 13/30] printk: nbcon: Do not rely on proxy headers John Ogness
2024-05-02 21:38 ` [PATCH printk v5 14/30] printk: nbcon: Fix kerneldoc for enums John Ogness
2024-05-02 21:38 ` [PATCH printk v5 15/30] printk: Make console_is_usable() available to nbcon John Ogness
2024-05-02 21:38 ` [PATCH printk v5 16/30] printk: Let console_is_usable() handle nbcon John Ogness
2024-05-02 21:38 ` [PATCH printk v5 17/30] printk: Add @flags argument for console_is_usable() John Ogness
2024-05-02 21:38 ` [PATCH printk v5 18/30] printk: nbcon: Add helper to assign priority based on CPU state John Ogness
2024-05-02 21:38 ` [PATCH printk v5 19/30] printk: nbcon: Provide function to flush using write_atomic() John Ogness
2024-05-20 15:04 ` Petr Mladek
2024-05-21 19:07 ` John Ogness
2024-05-02 21:38 ` [PATCH printk v5 20/30] printk: Track registered boot consoles John Ogness
2024-05-02 21:38 ` [PATCH printk v5 21/30] printk: nbcon: Use nbcon consoles in console_flush_all() John Ogness
2024-05-21 8:41 ` Petr Mladek
2024-05-02 21:38 ` [PATCH printk v5 22/30] printk: nbcon: Add unsafe flushing on panic John Ogness
2024-05-02 21:38 ` [PATCH printk v5 23/30] printk: Avoid console_lock dance if no legacy or boot consoles John Ogness
2024-05-02 21:38 ` [PATCH printk v5 24/30] printk: Track nbcon consoles John Ogness
2024-05-02 21:38 ` [PATCH printk v5 25/30] printk: Coordinate direct printing in panic John Ogness
2024-05-02 21:38 ` [PATCH printk v5 26/30] printk: nbcon: Implement emergency sections John Ogness
2024-05-06 10:39 ` John Ogness
2024-05-21 12:37 ` Petr Mladek
2024-05-21 13:38 ` Petr Mladek
2024-05-02 21:38 ` [PATCH printk v5 27/30] panic: Mark emergency section in warn John Ogness
2024-05-02 21:38 ` [PATCH printk v5 28/30] panic: Mark emergency section in oops John Ogness
2024-05-02 21:38 ` [PATCH printk v5 29/30] rcu: Mark emergency sections in rcu stalls John Ogness
2024-05-21 14:03 ` Petr Mladek
2024-05-02 21:38 ` [PATCH printk v5 30/30] lockdep: Mark emergency sections in lockdep splats John Ogness
2024-05-21 15:13 ` Petr Mladek
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=Zks-WkoTmAVFBgoP@pathway.suse.cz \
--to=pmladek@suse.com \
--cc=gregkh@linuxfoundation.org \
--cc=john.ogness@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--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.