[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Y1gCLDQP+6rYYRP5@alley>
Date: Tue, 25 Oct 2022 17:35:08 +0200
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 v2 30/38] printk: console_device: use srcu console
list iterator
On Wed 2022-10-19 17:01:52, John Ogness wrote:
> Use srcu console list iteration for console list traversal.
>
> Document why the console_lock is still necessary.
>
> Signed-off-by: John Ogness <john.ogness@...utronix.de>
> ---
> kernel/printk/printk.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
> index e478cb92e7ba..410ad9d5649c 100644
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -3025,15 +3025,24 @@ struct tty_driver *console_device(int *index)
> {
> struct console *c;
> struct tty_driver *driver = NULL;
> + int cookie;
>
> + /*
> + * Stop console printing because the device() callback may
> + * assume the console is not within its write() callback.
Again, I would like to know more details about the possible races
with the write() callback. It is not that obvious.
> + */
> console_lock();
> - for_each_console(c) {
> +
> + cookie = console_srcu_read_lock();
> + for_each_console_srcu(c) {
> if (!c->device)
> continue;
> driver = c->device(c, index);
> if (driver)
> break;
> }
> + console_srcu_read_unlock(cookie);
> +
> console_unlock();
> return driver;
Otherwise, the change looks good.
Best Regards,
Petr
Powered by blists - more mailing lists