serial: samsung: fix potential soft lockup during uart write
authorThomas Abraham <thomas.abraham@linaro.org>
Thu, 22 Nov 2012 12:36:28 +0000 (18:06 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 26 Nov 2012 23:36:39 +0000 (15:36 -0800)
commitc15c3747ee32b6969f3cfbc86dc94923e3742d0a
tree2c2f9b77abcaa8f116e6f87bf91208e6013d3fee
parentdaa74a25cc7351a9fb01ba7611af5ef5df80ae4e
serial: samsung: fix potential soft lockup during uart write

Certain tty line discipline implementations such slip and bluetooth hci invoke
the serial core uart_write() api in their write_wakeup callback. This leads to
a soft lockup with samsung serial driver since the uart port lock is taken in
the driver's interrupt handler and uart_write() attempts to take the same lock
again.

Fix this issue by releasing the uart port lock before the call to
uart_write_wakeup() in the tx handler. Also move the spin-lock/unlock sequence
from s3c64xx_serial_handle_irq() function into the tx and rx irq handlers so
that this change is applicable to s3c24xx platforms as well.

Reported-by: Kyungmin Park <kyungmin.park@samsung.com>
Reported-by: Hyeonkook Kim <hk619.kim@samsung.com>
Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/samsung.c