Hi Greg, The 3.10-stable tree needs this patch too. Can you push this patch to 3.10 stable tree ? Best regards! On 2015/3/24 18:35, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > > This is a note to let you know that I've just added the patch titled > > serial: 8250_dw: Fix deadlock in LCR workaround > > to the 3.19-stable tree which can be found at: > http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary > > The filename of the patch is: > serial-8250_dw-fix-deadlock-in-lcr-workaround.patch > and it can be found in the queue-3.19 subdirectory. > > If you, or anyone else, feels it should not be added to the stable tree, > please let <stable@xxxxxxxxxxxxxxx> know about it. > > >>From 7fd6f640f2dd17dac6ddd6702c378cb0bb9cfa11 Mon Sep 17 00:00:00 2001 > From: Peter Hurley <peter@xxxxxxxxxxxxxxxxxx> > Date: Wed, 11 Mar 2015 09:19:16 -0400 > Subject: serial: 8250_dw: Fix deadlock in LCR workaround > > From: Peter Hurley <peter@xxxxxxxxxxxxxxxxxx> > > commit 7fd6f640f2dd17dac6ddd6702c378cb0bb9cfa11 upstream. > > Trying to write console output from within the serial console driver > while the port->lock is held causes recursive deadlock: > > CPU 0 > spin_lock_irqsave(&port->lock) > printk() > console_unlock() > call_console_drivers() > serial8250_console_write() > spin_lock_irqsave(&port->lock) > ** DEADLOCK ** > > The 8250_dw i/o accessors try to write a console error message if the > LCR workaround was unsuccessful. When the port->lock is already held > (eg., when called from serial8250_set_termios()), this deadlocks. > > Make the error message a FIXME until a general solution is devised. > > Cc: Tim Kryger <tim.kryger@xxxxxxxxx> > Reported-by: Zhang Zhen <zhenzhang.zhang@xxxxxxxxxx> > Signed-off-by: Peter Hurley <peter@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > > --- > drivers/tty/serial/8250/8250_dw.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > --- a/drivers/tty/serial/8250/8250_dw.c > +++ b/drivers/tty/serial/8250/8250_dw.c > @@ -111,7 +111,10 @@ static void dw8250_serial_out(struct uar > dw8250_force_idle(p); > writeb(value, p->membase + (UART_LCR << p->regshift)); > } > - dev_err(p->dev, "Couldn't set LCR to %d\n", value); > + /* > + * FIXME: this deadlocks if port->lock is already held > + * dev_err(p->dev, "Couldn't set LCR to %d\n", value); > + */ > } > } > > @@ -155,7 +158,10 @@ static void dw8250_serial_outq(struct ua > __raw_writeq(value & 0xff, > p->membase + (UART_LCR << p->regshift)); > } > - dev_err(p->dev, "Couldn't set LCR to %d\n", value); > + /* > + * FIXME: this deadlocks if port->lock is already held > + * dev_err(p->dev, "Couldn't set LCR to %d\n", value); > + */ > } > } > #endif /* CONFIG_64BIT */ > @@ -179,7 +185,10 @@ static void dw8250_serial_out32(struct u > dw8250_force_idle(p); > writel(value, p->membase + (UART_LCR << p->regshift)); > } > - dev_err(p->dev, "Couldn't set LCR to %d\n", value); > + /* > + * FIXME: this deadlocks if port->lock is already held > + * dev_err(p->dev, "Couldn't set LCR to %d\n", value); > + */ > } > } > > > > Patches currently in stable-queue which might be from peter@xxxxxxxxxxxxxxxxxx are > > queue-3.19/serial-core-fix-iotype-userspace-breakage.patch > queue-3.19/console-fix-console-name-size-mismatch.patch > queue-3.19/serial-8250_dw-fix-deadlock-in-lcr-workaround.patch > > . > -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html