| From | John Ogness <> | Subject | [PATCH printk v2 30/38] printk: console_device: use srcu console list iterator | Date | Wed, 19 Oct 2022 17:01:52 +0206 |
| |
Use srcu console list iteration for console list traversal.
Document why the console_lock is still necessary.
Signed-off-by: John Ogness <john.ogness@linutronix.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. + */ 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
|