From 67d2bc58afdd5168dce54ae06f5f30038c59f498 Mon Sep 17 00:00:00 2001
From: Jan Yenya Kasprzak <kas@fi.muni.cz>
Date: Mon, 23 Apr 2007 14:41:02 -0700
Subject: [PATCH] Char: mxser_new, fix recursive locking

Signed-off-by: Jan "Yenya" Kasprzak <kas@fi.muni.cz>
Acked-by: Jiri Slaby <jirislaby@gmail.com>
Acked-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
---
 drivers/char/mxser_new.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/char/mxser_new.c b/drivers/char/mxser_new.c
index 9af07e4999d5f..59e0aac19c2fc 100644
--- a/drivers/char/mxser_new.c
+++ b/drivers/char/mxser_new.c
@@ -2230,7 +2230,14 @@ static void mxser_receive_chars(struct mxser_port *port, int *status)
 	port->mon_data.rxcnt += cnt;
 	port->mon_data.up_rxcnt += cnt;
 
+	/*
+	 * We are called from an interrupt context with &port->slock
+	 * being held. Drop it temporarily in order to prevent
+	 * recursive locking.
+	 */
+	spin_unlock(&port->slock);
 	tty_flip_buffer_push(tty);
+	spin_lock(&port->slock);
 }
 
 static void mxser_transmit_chars(struct mxser_port *port)
-- 
GitLab