msm_serial_hs: Fix spinlock recursion in handling CTS
authorMayank Rana <mrana@codeaurora.org>
Thu, 8 Dec 2011 03:36:09 +0000 (09:06 +0530)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sat, 10 Dec 2011 03:10:04 +0000 (19:10 -0800)
msm_hs_handle_delta_cts tries to acquire port->lock already acquired
by the callee function msm_hs_isr. Change function name to follow
"_locked" convention.

Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/tty/serial/msm_serial_hs.c

index 9f67b62cb77dbfc6d2b5dee3de3170ce4b4c4e66..5e85e1e14c44009f80ea2ae8e668b2840efc770d 100644 (file)
@@ -1087,12 +1087,10 @@ static void msm_hs_config_port(struct uart_port *uport, int cfg_flags)
 }
 
 /*  Handle CTS changes (Called from interrupt handler) */
-static void msm_hs_handle_delta_cts(struct uart_port *uport)
+static void msm_hs_handle_delta_cts_locked(struct uart_port *uport)
 {
-       unsigned long flags;
        struct msm_hs_port *msm_uport = UARTDM_TO_MSM(uport);
 
-       spin_lock_irqsave(&uport->lock, flags);
        clk_enable(msm_uport->clk);
 
        /* clear interrupt */
@@ -1100,7 +1098,6 @@ static void msm_hs_handle_delta_cts(struct uart_port *uport)
        uport->icount.cts++;
 
        clk_disable(msm_uport->clk);
-       spin_unlock_irqrestore(&uport->lock, flags);
 
        /* clear the IOCTL TIOCMIWAIT if called */
        wake_up_interruptible(&uport->state->port.delta_msr_wait);
@@ -1248,7 +1245,7 @@ static irqreturn_t msm_hs_isr(int irq, void *dev)
 
        /* Change in CTS interrupt */
        if (isr_status & UARTDM_ISR_DELTA_CTS_BMSK)
-               msm_hs_handle_delta_cts(uport);
+               msm_hs_handle_delta_cts_locked(uport);
 
        spin_unlock_irqrestore(&uport->lock, flags);