]> Pileus Git - ~andy/linux/blobdiff - drivers/tty/serial/lpc32xx_hs.c
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux...
[~andy/linux] / drivers / tty / serial / lpc32xx_hs.c
index dffea6b2cd7d206314fe6a69ecd0cecc7cce7d56..701644f06820db0a9dbe052d560a0d1bf3f342be 100644 (file)
@@ -279,7 +279,10 @@ static void __serial_lpc32xx_rx(struct uart_port *port)
 
                tmp = readl(LPC32XX_HSUART_FIFO(port->membase));
        }
+
+       spin_unlock(&port->lock);
        tty_flip_buffer_push(tport);
+       spin_lock(&port->lock);
 }
 
 static void __serial_lpc32xx_tx(struct uart_port *port)
@@ -351,10 +354,8 @@ static irqreturn_t serial_lpc32xx_interrupt(int irq, void *dev_id)
        }
 
        /* Data received? */
-       if (status & (LPC32XX_HSU_RX_TIMEOUT_INT | LPC32XX_HSU_RX_TRIG_INT)) {
+       if (status & (LPC32XX_HSU_RX_TIMEOUT_INT | LPC32XX_HSU_RX_TRIG_INT))
                __serial_lpc32xx_rx(port);
-               tty_flip_buffer_push(tport);
-       }
 
        /* Transmit data request? */
        if ((status & LPC32XX_HSU_TX_INT) && (!uart_tx_stopped(port))) {