summaryrefslogtreecommitdiffstats
path: root/arch/xtensa
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2012-03-05 14:52:06 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-03-08 20:47:01 +0100
commitc9ddb1d6e29697029118377c1f4f9a4a148d755e (patch)
tree565b58ae6c81d692b7e1d4f74d51aa95ccaa99f9 /arch/xtensa
parentXTENSA: iss/console, use setup_timer (diff)
downloadlinux-c9ddb1d6e29697029118377c1f4f9a4a148d755e.tar.xz
linux-c9ddb1d6e29697029118377c1f4f9a4a148d755e.zip
XTENSA: iss/console, fix potential deadlock
If the timer ticks while we are holding the spinlock, the system deadlocks. It is due to synchronous del_timer. So to fix that, use spinlocks that properly disable bottom halves. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Cc: Chris Zankel <chris@zankel.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch/xtensa')
-rw-r--r--arch/xtensa/platforms/iss/console.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c
index 01842e4d1904..94ab8eca9d77 100644
--- a/arch/xtensa/platforms/iss/console.c
+++ b/arch/xtensa/platforms/iss/console.c
@@ -91,11 +91,10 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
*/
static void rs_close(struct tty_struct *tty, struct file * filp)
{
- spin_lock(&timer_lock);
+ spin_lock_bh(&timer_lock);
if (tty->count == 1)
- /* this will cause a deadlock if the timer ticks right now */
del_timer_sync(&serial_timer);
- spin_unlock(&timer_lock);
+ spin_unlock_bh(&timer_lock);
}