diff options
author | Simon Kagstrom <simon.kagstrom@netinsight.net> | 2010-01-11 09:57:24 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-01-11 10:39:21 -0500 |
commit | cc20b900be7aa8e456aff82dfcb55fb15c508962 (patch) | |
tree | e031b4397bf585a3c9cf97a373400c2e269416a5 | |
parent | 4c9f8be7dab831c78b5f491739fc5cd01f2efb03 (diff) |
ARM: 5874/1: serial21285: fix disable_irq-from-interrupt-handler deadlock
The console hangs during bootup when disable_irq is called from the
transmit interrupt handler (it will wait forever for it's "own"
interrupt in synchronize_irq). Fix by using disable_irq_nosync()
instead.
Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | drivers/serial/21285.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/serial/21285.c b/drivers/serial/21285.c index 1e3d19397a59..8681f1345056 100644 --- a/drivers/serial/21285.c +++ b/drivers/serial/21285.c | |||
@@ -58,7 +58,7 @@ static const char serial21285_name[] = "Footbridge UART"; | |||
58 | static void serial21285_stop_tx(struct uart_port *port) | 58 | static void serial21285_stop_tx(struct uart_port *port) |
59 | { | 59 | { |
60 | if (tx_enabled(port)) { | 60 | if (tx_enabled(port)) { |
61 | disable_irq(IRQ_CONTX); | 61 | disable_irq_nosync(IRQ_CONTX); |
62 | tx_enabled(port) = 0; | 62 | tx_enabled(port) = 0; |
63 | } | 63 | } |
64 | } | 64 | } |
@@ -74,7 +74,7 @@ static void serial21285_start_tx(struct uart_port *port) | |||
74 | static void serial21285_stop_rx(struct uart_port *port) | 74 | static void serial21285_stop_rx(struct uart_port *port) |
75 | { | 75 | { |
76 | if (rx_enabled(port)) { | 76 | if (rx_enabled(port)) { |
77 | disable_irq(IRQ_CONRX); | 77 | disable_irq_nosync(IRQ_CONRX); |
78 | rx_enabled(port) = 0; | 78 | rx_enabled(port) = 0; |
79 | } | 79 | } |
80 | } | 80 | } |