diff options
author | Mayank Rana <mrana@codeaurora.org> | 2011-12-08 09:06:09 +0530 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-12-09 19:10:04 -0800 |
commit | ee815f3a76a0d874bd29635366af572fb6ebe535 (patch) | |
tree | 6bd49992c43c05dd2af39d9d95993d096390579c /drivers/tty/serial/msm_serial_hs.c | |
parent | 8431de80dad20979cc8354a90f70e2faac017932 (diff) | |
download | linux-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.c | 7 |
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); |