Loading drivers/tty/serial/kgdboc.c +5 −15 Original line number Diff line number Diff line Loading @@ -171,6 +171,7 @@ static int configure_kgdboc(void) int err = -ENODEV; char *cptr = config; struct console *cons; int cookie; if (!strlen(config) || isspace(config[0])) { err = 0; Loading @@ -189,20 +190,9 @@ 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) { console_list_unlock(); if (!p) goto noconfig; } /* * Take console_lock to serialize device() callback with Loading @@ -211,7 +201,8 @@ static int configure_kgdboc(void) */ console_lock(); for_each_console(cons) { cookie = console_srcu_read_lock(); for_each_console_srcu(cons) { int idx; if (cons->device && cons->device(cons, &idx) == p && idx == tty_line) { Loading @@ -219,11 +210,10 @@ static int configure_kgdboc(void) break; } } console_srcu_read_unlock(cookie); console_unlock(); console_list_unlock(); kgdb_tty_driver = p; kgdb_tty_line = tty_line; Loading drivers/tty/serial/serial_core.c +5 −0 Original line number Diff line number Diff line Loading @@ -2212,6 +2212,9 @@ EXPORT_SYMBOL_GPL(uart_parse_options); * @parity: parity character - 'n' (none), 'o' (odd), 'e' (even) * @bits: number of data bits * @flow: flow control character - 'r' (rts) * * Locking: Caller must hold console_list_lock in order to serialize * early initialization of the serial-console lock. */ int uart_set_options(struct uart_port *port, struct console *co, Loading Loading @@ -2619,7 +2622,9 @@ static int uart_poll_init(struct tty_driver *driver, int line, char *options) if (!ret && options) { uart_parse_options(options, &baud, &parity, &bits, &flow); console_list_lock(); ret = uart_set_options(port, NULL, baud, parity, bits, flow); console_list_unlock(); } out: mutex_unlock(&tport->mutex); Loading kernel/printk/printk.c +2 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,7 @@ bool console_srcu_read_lock_is_held(void) { return srcu_read_lock_held(&console_srcu); } EXPORT_SYMBOL(console_srcu_read_lock_is_held); #endif enum devkmsg_log_bits { Loading Loading @@ -1891,6 +1892,7 @@ static void console_lock_spinning_enable(void) /** * console_lock_spinning_disable_and_check - mark end of code where another * thread was able to busy wait and check if there is a waiter * @cookie: cookie returned from console_srcu_read_lock() * * This is called at the end of the section where spinning is allowed. * It has two functions. First, it is a signal that it is no longer Loading Loading
drivers/tty/serial/kgdboc.c +5 −15 Original line number Diff line number Diff line Loading @@ -171,6 +171,7 @@ static int configure_kgdboc(void) int err = -ENODEV; char *cptr = config; struct console *cons; int cookie; if (!strlen(config) || isspace(config[0])) { err = 0; Loading @@ -189,20 +190,9 @@ 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) { console_list_unlock(); if (!p) goto noconfig; } /* * Take console_lock to serialize device() callback with Loading @@ -211,7 +201,8 @@ static int configure_kgdboc(void) */ console_lock(); for_each_console(cons) { cookie = console_srcu_read_lock(); for_each_console_srcu(cons) { int idx; if (cons->device && cons->device(cons, &idx) == p && idx == tty_line) { Loading @@ -219,11 +210,10 @@ static int configure_kgdboc(void) break; } } console_srcu_read_unlock(cookie); console_unlock(); console_list_unlock(); kgdb_tty_driver = p; kgdb_tty_line = tty_line; Loading
drivers/tty/serial/serial_core.c +5 −0 Original line number Diff line number Diff line Loading @@ -2212,6 +2212,9 @@ EXPORT_SYMBOL_GPL(uart_parse_options); * @parity: parity character - 'n' (none), 'o' (odd), 'e' (even) * @bits: number of data bits * @flow: flow control character - 'r' (rts) * * Locking: Caller must hold console_list_lock in order to serialize * early initialization of the serial-console lock. */ int uart_set_options(struct uart_port *port, struct console *co, Loading Loading @@ -2619,7 +2622,9 @@ static int uart_poll_init(struct tty_driver *driver, int line, char *options) if (!ret && options) { uart_parse_options(options, &baud, &parity, &bits, &flow); console_list_lock(); ret = uart_set_options(port, NULL, baud, parity, bits, flow); console_list_unlock(); } out: mutex_unlock(&tport->mutex); Loading
kernel/printk/printk.c +2 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,7 @@ bool console_srcu_read_lock_is_held(void) { return srcu_read_lock_held(&console_srcu); } EXPORT_SYMBOL(console_srcu_read_lock_is_held); #endif enum devkmsg_log_bits { Loading Loading @@ -1891,6 +1892,7 @@ static void console_lock_spinning_enable(void) /** * console_lock_spinning_disable_and_check - mark end of code where another * thread was able to busy wait and check if there is a waiter * @cookie: cookie returned from console_srcu_read_lock() * * This is called at the end of the section where spinning is allowed. * It has two functions. First, it is a signal that it is no longer Loading