aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/tty/serial/netx-serial.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/tty/serial/netx-serial.c b/drivers/tty/serial/netx-serial.c
index ce04f3f8c547..0a4dd70d29eb 100644
--- a/drivers/tty/serial/netx-serial.c
+++ b/drivers/tty/serial/netx-serial.c
@@ -196,7 +196,7 @@ static void netx_txint(struct uart_port *port)
196 uart_write_wakeup(port); 196 uart_write_wakeup(port);
197} 197}
198 198
199static void netx_rxint(struct uart_port *port) 199static void netx_rxint(struct uart_port *port, unsigned long *flags)
200{ 200{
201 unsigned char rx, flg, status; 201 unsigned char rx, flg, status;
202 202
@@ -236,7 +236,9 @@ static void netx_rxint(struct uart_port *port)
236 uart_insert_char(port, status, SR_OE, rx, flg); 236 uart_insert_char(port, status, SR_OE, rx, flg);
237 } 237 }
238 238
239 spin_unlock_irqrestore(&port->lock, *flags);
239 tty_flip_buffer_push(&port->state->port); 240 tty_flip_buffer_push(&port->state->port);
241 spin_lock_irqsave(&port->lock, *flags);
240} 242}
241 243
242static irqreturn_t netx_int(int irq, void *dev_id) 244static irqreturn_t netx_int(int irq, void *dev_id)
@@ -250,7 +252,7 @@ static irqreturn_t netx_int(int irq, void *dev_id)
250 status = readl(port->membase + UART_IIR) & IIR_MASK; 252 status = readl(port->membase + UART_IIR) & IIR_MASK;
251 while (status) { 253 while (status) {
252 if (status & IIR_RIS) 254 if (status & IIR_RIS)
253 netx_rxint(port); 255 netx_rxint(port, &flags);
254 if (status & IIR_TIS) 256 if (status & IIR_TIS)
255 netx_txint(port); 257 netx_txint(port);
256 if (status & IIR_MIS) { 258 if (status & IIR_MIS) {