diff --git a/drivers/char/mxser_new.c b/drivers/char/mxser_new.c index 9af07e4999d5f0cac406a3f2200adad82b27dcca..59e0aac19c2fc7cf5a34166b616fce4d9cc85868 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)