Message ID | 20221116162152.193147-38-john.ogness@linutronix.de |
---|---|
State | New |
Headers | show |
Series | reduce console_lock scope | expand |
On 2022-11-16, Doug Anderson <dianders@chromium.org> wrote: > Seems OK to me, though I guess I would have moved console_lock() up > too just because this isn't a case we need to optimize and then we can > be extra certain that nobody else is messing with console structures > while we're looking at them. Actually this series is not about optimization. It is about reducing the scope of console_lock and removing unnecessary use of it. If tty_find_polling_driver() needs to be called under the console_lock, then we need to document exactly why. I could not find any situations where it is necessary. Also keep in mind that in the long term we will be completely removing the console_lock. It is a painful process of identifying and dismantling its scope and replacing it with multiple clearly scoped locking mechanisms. > Reviewed-by: Douglas Anderson <dianders@chromium.org> Thanks. John
diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c index 82b4b4d67823..8c2b7ccdfebf 100644 --- a/drivers/tty/serial/kgdboc.c +++ b/drivers/tty/serial/kgdboc.c @@ -189,12 +189,20 @@ static int configure_kgdboc(void) if (kgdboc_register_kbd(&cptr)) goto do_register; + /* + * tty_find_polling_driver() can call uart_set_options() + * (via poll_init) to configure the uart. Take the console_list_lock + * in order to synchronize against register_console(), which can also + * configure the uart via uart_set_options(). This also allows safe + * traversal of the console list. + */ + console_list_lock(); + p = tty_find_polling_driver(cptr, &tty_line); - if (!p) + if (!p) { + console_list_unlock(); goto noconfig; - - /* For safe traversal of the console list. */ - console_list_lock(); + } /* * Take console_lock to serialize device() callback with