From: Jan Yenya Kasprzak Signed-off-by: Jan "Yenya" Kasprzak Acked-by: Jiri Slaby Acked-by: Alan Cox Signed-off-by: Andrew Morton --- drivers/char/mxser_new.c | 7 +++++++ 1 file changed, 7 insertions(+) diff -puN drivers/char/mxser_new.c~char-mxser_new-fix-recursive-locking drivers/char/mxser_new.c --- a/drivers/char/mxser_new.c~char-mxser_new-fix-recursive-locking +++ a/drivers/char/mxser_new.c @@ -2230,7 +2230,14 @@ end_intr: 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) _