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: Mayank Rana <mrana@codeaurora.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
8431de80da
commit
ee815f3a76
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue