aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/serial/serial_ks8695.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/serial/serial_ks8695.c')
-rw-r--r--drivers/serial/serial_ks8695.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/serial/serial_ks8695.c b/drivers/serial/serial_ks8695.c
index 998e89dc5aaf..52db5cc3f900 100644
--- a/drivers/serial/serial_ks8695.c
+++ b/drivers/serial/serial_ks8695.c
@@ -110,7 +110,11 @@ static struct console ks8695_console;
110static void ks8695uart_stop_tx(struct uart_port *port) 110static void ks8695uart_stop_tx(struct uart_port *port)
111{ 111{
112 if (tx_enabled(port)) { 112 if (tx_enabled(port)) {
113 disable_irq(KS8695_IRQ_UART_TX); 113 /* use disable_irq_nosync() and not disable_irq() to avoid self
114 * imposed deadlock by not waiting for irq handler to end,
115 * since this ks8695uart_stop_tx() is called from interrupt context.
116 */
117 disable_irq_nosync(KS8695_IRQ_UART_TX);
114 tx_enable(port, 0); 118 tx_enable(port, 0);
115 } 119 }
116} 120}
@@ -549,7 +553,7 @@ static struct uart_port ks8695uart_ports[SERIAL_KS8695_NR] = {
549 .mapbase = KS8695_UART_VA, 553 .mapbase = KS8695_UART_VA,
550 .iotype = SERIAL_IO_MEM, 554 .iotype = SERIAL_IO_MEM,
551 .irq = KS8695_IRQ_UART_TX, 555 .irq = KS8695_IRQ_UART_TX,
552 .uartclk = CLOCK_TICK_RATE * 16, 556 .uartclk = KS8695_CLOCK_RATE * 16,
553 .fifosize = 16, 557 .fifosize = 16,
554 .ops = &ks8695uart_pops, 558 .ops = &ks8695uart_pops,
555 .flags = ASYNC_BOOT_AUTOCONF, 559 .flags = ASYNC_BOOT_AUTOCONF,