From: Dick Hollenbeck Date: Wed, 2 Sep 2009 16:07:29 +0000 (+0100) Subject: ARM: 5688/1: ks8695_serial: disable_irq() lockup X-Git-Tag: firefly_0821_release~12971^2^2~4 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c47a830c08a26a7c210ae16a0ffe3f56ba86ea69;p=firefly-linux-kernel-4.4.55.git ARM: 5688/1: ks8695_serial: disable_irq() lockup disable_irq() cannot be called from interrupt context without self imposed deadlock. This was happening in ks8695uart_stop_tx(). Signed-off-by: Dick Hollenbeck Signed-off-by: Russell King --- diff --git a/drivers/serial/serial_ks8695.c b/drivers/serial/serial_ks8695.c index e0665630e4da..52db5cc3f900 100644 --- a/drivers/serial/serial_ks8695.c +++ b/drivers/serial/serial_ks8695.c @@ -110,7 +110,11 @@ static struct console ks8695_console; static void ks8695uart_stop_tx(struct uart_port *port) { if (tx_enabled(port)) { - disable_irq(KS8695_IRQ_UART_TX); + /* use disable_irq_nosync() and not disable_irq() to avoid self + * imposed deadlock by not waiting for irq handler to end, + * since this ks8695uart_stop_tx() is called from interrupt context. + */ + disable_irq_nosync(KS8695_IRQ_UART_TX); tx_enable(port, 0); } }