From 96eeb4fb810aa4c408bd875be79ff0d7b8a851ec Mon Sep 17 00:00:00 2001 From: Russell King Date: Tue, 2 May 2006 16:04:29 +0100 Subject: [PATCH] --- yaml --- r: 26650 b: refs/heads/master c: d8a5a8d7cc32e4474326e0ecc1b959063490efc9 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/serial/8250.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 51283de3d92c..72a78fa07bf0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a88d75b257b2b28b26d7d4d2b640f05feb00ad53 +refs/heads/master: d8a5a8d7cc32e4474326e0ecc1b959063490efc9 diff --git a/trunk/drivers/serial/8250.c b/trunk/drivers/serial/8250.c index e001ea0606ec..bbf78aaf9e01 100644 --- a/trunk/drivers/serial/8250.c +++ b/trunk/drivers/serial/8250.c @@ -2235,10 +2235,17 @@ static void serial8250_console_write(struct console *co, const char *s, unsigned int count) { struct uart_8250_port *up = &serial8250_ports[co->index]; + unsigned long flags; unsigned int ier; + int locked = 1; touch_nmi_watchdog(); + if (oops_in_progress) { + locked = spin_trylock_irqsave(&up->port.lock, flags); + } else + spin_lock_irqsave(&up->port.lock, flags); + /* * First save the IER then disable the interrupts */ @@ -2257,6 +2264,9 @@ serial8250_console_write(struct console *co, const char *s, unsigned int count) */ wait_for_xmitr(up, BOTH_EMPTY); serial_out(up, UART_IER, ier); + + if (locked) + spin_unlock_irqrestore(&up->port.lock, flags); } static int serial8250_console_setup(struct console *co, char *options)