--- drivers/serial/21285.c 2009-12-18 17:27:07.000000000 -0500 +++ drivers/serial/21285.c 2009-12-28 16:30:02.000000000 -0500 @@ -63,6 +63,14 @@ } } +static void serial21285_stop_tx_nosync(struct uart_port *port) +{ + if (tx_enabled(port)) { + disable_irq_nosync(IRQ_CONTX); + tx_enabled(port) = 0; + } +} + static void serial21285_start_tx(struct uart_port *port) { if (!tx_enabled(port)) { @@ -134,7 +142,7 @@ goto out; } if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { - serial21285_stop_tx(port); + serial21285_stop_tx_nosync(port); goto out; } @@ -150,7 +158,7 @@ uart_write_wakeup(port); if (uart_circ_empty(xmit)) - serial21285_stop_tx(port); + serial21285_stop_tx_nosync(port); out: return IRQ_HANDLED;