diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2006-02-02 23:53:39 +0300 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-02-02 23:53:39 +0300 |
commit | 9c0f4755bd5a117595761c95b93c29e8d9ca07b5 (patch) | |
tree | 33737024ea3ad4dd9d1cfe4a043fb947f00059db /drivers/serial/serial_core.c | |
parent | 3ec9c59449744dcc390d593a017d30671546fd9e (diff) | |
download | linux-9c0f4755bd5a117595761c95b93c29e8d9ca07b5.tar.xz |
[SERIAL] initialize spinlock for port failed to setup console
It seems serial_core intend to initialize port->lock just once for each
ports. This is done in uart_set_options() for console, and in
uart_add_one_port() for other ports. But there is a case the port->lock is
not initialized by serial_core. If the setup function for the console was
failed, it will not call uart_set_options() but the port is marked as
console (uart_console(port) returns 1). It can happen if console was PCI
port which can not detected at the time of register_console.
This patch is to initialize port->lock for such console port. With this
change, most of spin_lock_init() (some of them are labeled "Temporary
fix.") in low-level serial drivers can be omitted.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/serial/serial_core.c')
-rw-r--r-- | drivers/serial/serial_core.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c index 0717abfdae06..95fb4939c675 100644 --- a/drivers/serial/serial_core.c +++ b/drivers/serial/serial_core.c @@ -2237,7 +2237,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *port) * If this port is a console, then the spinlock is already * initialised. */ - if (!uart_console(port)) + if (!(uart_console(port) && (port->cons->flags & CON_ENABLED))) spin_lock_init(&port->lock); uart_configure_port(drv, state, port); |