Commit 8cb15f7f authored by John Ogness's avatar John Ogness Committed by Petr Mladek

printk: console_device: use srcu console list iterator

Use srcu console list iteration for console list traversal. It is
acceptable because the consoles might come and go at any time.
Strict synchronizing with console registration code would not bring
any advantage over srcu.

Document why the console_lock is still necessary. Note that this
is a preparatory change for when console_lock no longer provides
synchronization for the console list.
Signed-off-by: default avatarJohn Ogness <john.ogness@linutronix.de>
Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20221116162152.193147-21-john.ogness@linutronix.de
parent 87f2e4b7
...@@ -3077,15 +3077,25 @@ struct tty_driver *console_device(int *index) ...@@ -3077,15 +3077,25 @@ struct tty_driver *console_device(int *index)
{ {
struct console *c; struct console *c;
struct tty_driver *driver = NULL; struct tty_driver *driver = NULL;
int cookie;
/*
* Take console_lock to serialize device() callback with
* other console operations. For example, fg_console is
* modified under console_lock when switching vt.
*/
console_lock(); console_lock();
for_each_console(c) {
cookie = console_srcu_read_lock();
for_each_console_srcu(c) {
if (!c->device) if (!c->device)
continue; continue;
driver = c->device(c, index); driver = c->device(c, index);
if (driver) if (driver)
break; break;
} }
console_srcu_read_unlock(cookie);
console_unlock(); console_unlock();
return driver; return driver;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment