summaryrefslogtreecommitdiff
path: root/drivers/tty/serial/msm_serial_hs.c
diff options
context:
space:
mode:
authorMayank Rana <mrana@codeaurora.org>2011-12-08 09:06:09 +0530
committerGreg Kroah-Hartman <gregkh@suse.de>2011-12-09 19:10:04 -0800
commitee815f3a76a0d874bd29635366af572fb6ebe535 (patch)
tree6bd49992c43c05dd2af39d9d95993d096390579c /drivers/tty/serial/msm_serial_hs.c
parent8431de80dad20979cc8354a90f70e2faac017932 (diff)
downloadlinux-stable-ee815f3a76a0d874bd29635366af572fb6ebe535.tar.gz
linux-stable-ee815f3a76a0d874bd29635366af572fb6ebe535.tar.bz2
linux-stable-ee815f3a76a0d874bd29635366af572fb6ebe535.zip
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>
Diffstat (limited to 'drivers/tty/serial/msm_serial_hs.c')
-rw-r--r--drivers/tty/serial/msm_serial_hs.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/tty/serial/msm_serial_hs.c b/drivers/tty/serial/msm_serial_hs.c
index 9f67b62cb77d..5e85e1e14c44 100644
--- a/drivers/tty/serial/msm_serial_hs.c
+++ b/drivers/tty/serial/msm_serial_hs.c
@@ -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);