Commit ee815f3a authored by Mayank Rana's avatar Mayank Rana Committed by Greg Kroah-Hartman

msm_serial_hs: Fix spinlock recursion in handling CTS

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: default avatarMayank Rana <mrana@codeaurora.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 8431de80
...@@ -1087,12 +1087,10 @@ static void msm_hs_config_port(struct uart_port *uport, int cfg_flags) ...@@ -1087,12 +1087,10 @@ static void msm_hs_config_port(struct uart_port *uport, int cfg_flags)
} }
/* Handle CTS changes (Called from interrupt handler) */ /* 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); struct msm_hs_port *msm_uport = UARTDM_TO_MSM(uport);
spin_lock_irqsave(&uport->lock, flags);
clk_enable(msm_uport->clk); clk_enable(msm_uport->clk);
/* clear interrupt */ /* clear interrupt */
...@@ -1100,7 +1098,6 @@ static void msm_hs_handle_delta_cts(struct uart_port *uport) ...@@ -1100,7 +1098,6 @@ static void msm_hs_handle_delta_cts(struct uart_port *uport)
uport->icount.cts++; uport->icount.cts++;
clk_disable(msm_uport->clk); clk_disable(msm_uport->clk);
spin_unlock_irqrestore(&uport->lock, flags);
/* clear the IOCTL TIOCMIWAIT if called */ /* clear the IOCTL TIOCMIWAIT if called */
wake_up_interruptible(&uport->state->port.delta_msr_wait); wake_up_interruptible(&uport->state->port.delta_msr_wait);
...@@ -1248,7 +1245,7 @@ static irqreturn_t msm_hs_isr(int irq, void *dev) ...@@ -1248,7 +1245,7 @@ static irqreturn_t msm_hs_isr(int irq, void *dev)
/* Change in CTS interrupt */ /* Change in CTS interrupt */
if (isr_status & UARTDM_ISR_DELTA_CTS_BMSK) 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); spin_unlock_irqrestore(&uport->lock, flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment