diff --git a/drivers/tty/serial/msm_geni_serial.c b/drivers/tty/serial/msm_geni_serial.c index d2461973ce19..065278bba5e2 100644 --- a/drivers/tty/serial/msm_geni_serial.c +++ b/drivers/tty/serial/msm_geni_serial.c @@ -2100,8 +2100,9 @@ static bool handle_rx_dma_xfer(u32 s_irq_status, struct uart_port *uport) bool drop_rx = false; struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport); u32 dma_rx_status; + unsigned long lock_flags; - spin_lock(&msm_port->rx_lock); + spin_lock_irqsave(&msm_port->rx_lock, lock_flags); dma_rx_status = geni_read_reg_nolog(uport->membase, SE_DMA_RX_IRQ_STAT); @@ -2166,7 +2167,7 @@ static bool handle_rx_dma_xfer(u32 s_irq_status, struct uart_port *uport) ret = true; exit: - spin_unlock(&msm_port->rx_lock); + spin_unlock_irqrestore(&msm_port->rx_lock, lock_flags); return ret; }