| From | John Ogness <> | Subject | [PATCH printk v3 19/40] printk: console_device: use srcu console list iterator | Date | Mon, 7 Nov 2022 15:22:17 +0106 |
| |
Use srcu console list iteration for console list traversal.
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: John Ogness <john.ogness@linutronix.de> --- kernel/printk/printk.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index de86a502b50b..ec50777d0301 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -3029,15 +3029,25 @@ struct tty_driver *console_device(int *index) { struct console *c; 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(); - 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; } -- 2.30.2
|