diff options
Diffstat (limited to 'drivers/tty/serial/pxa.c')
-rw-r--r-- | drivers/tty/serial/pxa.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/tty/serial/pxa.c b/drivers/tty/serial/pxa.c index 21b7d8b86493..7788d53281a0 100644 --- a/drivers/tty/serial/pxa.c +++ b/drivers/tty/serial/pxa.c | |||
@@ -223,6 +223,7 @@ static void serial_pxa_start_tx(struct uart_port *port) | |||
223 | } | 223 | } |
224 | } | 224 | } |
225 | 225 | ||
226 | /* should hold up->port.lock */ | ||
226 | static inline void check_modem_status(struct uart_pxa_port *up) | 227 | static inline void check_modem_status(struct uart_pxa_port *up) |
227 | { | 228 | { |
228 | int status; | 229 | int status; |
@@ -255,12 +256,14 @@ static inline irqreturn_t serial_pxa_irq(int irq, void *dev_id) | |||
255 | iir = serial_in(up, UART_IIR); | 256 | iir = serial_in(up, UART_IIR); |
256 | if (iir & UART_IIR_NO_INT) | 257 | if (iir & UART_IIR_NO_INT) |
257 | return IRQ_NONE; | 258 | return IRQ_NONE; |
259 | spin_lock(&up->port.lock); | ||
258 | lsr = serial_in(up, UART_LSR); | 260 | lsr = serial_in(up, UART_LSR); |
259 | if (lsr & UART_LSR_DR) | 261 | if (lsr & UART_LSR_DR) |
260 | receive_chars(up, &lsr); | 262 | receive_chars(up, &lsr); |
261 | check_modem_status(up); | 263 | check_modem_status(up); |
262 | if (lsr & UART_LSR_THRE) | 264 | if (lsr & UART_LSR_THRE) |
263 | transmit_chars(up); | 265 | transmit_chars(up); |
266 | spin_unlock(&up->port.lock); | ||
264 | return IRQ_HANDLED; | 267 | return IRQ_HANDLED; |
265 | } | 268 | } |
266 | 269 | ||