On Fri, Mar 27, 2015 at 02:48:55PM +0800, Zhang Zhen wrote: > Hi Greg, > > The 3.10-stable tree needs this patch too. > Can you push this patch to 3.10 stable tree ? > > Best regards! > I'll queue this for the 3.16 kernel as well -- the backport seems to be trivial (simply dropping changes to dw8250_serial_outq()). Cheers, -- Luís > 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 -- 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