diff options
-rw-r--r-- | drivers/tty/serial/netx-serial.c | 6 |
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 | ||
199 | static void netx_rxint(struct uart_port *port) | 199 | static 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 | ||
242 | static irqreturn_t netx_int(int irq, void *dev_id) | 244 | static 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) { |