Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S941657AbcJYMz5 (ORCPT ); Tue, 25 Oct 2016 08:55:57 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:36633 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754077AbcJYMzy (ORCPT ); Tue, 25 Oct 2016 08:55:54 -0400 Message-ID: <1477400150.4332.9.camel@gmail.com> Subject: Re: [PATCH] serial: core: fix console problems on uart_close From: Mike Galbraith To: Geert Uytterhoeven , Rob Herring Cc: Greg Kroah-Hartman , Niklas =?ISO-8859-1?Q?S=F6derlund?= , Mugunthan V N , Geert Uytterhoeven , "linux-kernel@vger.kernel.org" , Peter Hurley , Alan Cox , Jiri Slaby , "linux-serial@vger.kernel.org" Date: Tue, 25 Oct 2016 14:55:50 +0200 In-Reply-To: References: <20161024205649.32430-1-robh@kernel.org> Content-Type: text/plain; charset="us-ascii" X-Mailer: Evolution 3.16.5 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1668 Lines: 47 On Tue, 2016-10-25 at 12:40 +0200, Geert Uytterhoeven wrote: > Mike: I see you are using a PC, while I'm using an ARM board (with DT). > Are you using a serial console? If yes, what's the value of port->console > before and after the call to uart_console() that Rob's patch below removes? Well, it's a bit larger than the average PC, it's a 64 core HP DL980, and my console is its virtual serial port. [ 15.217487] Serial: 8250/16550 driver, 32 ports, IRQ sharing disabled [ 15.228212] MIKE port:ffff880276400000 port->console:0 [ 15.240889] MIKE port:ffff880276400000 port->console:0 [ 15.269606] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A [ 15.282538] MIKE port:ffff8802764001a8 port->console:0 [ 15.293195] MIKE port:ffff8802764001a8 port->console:1 [ 15.322806] serial8250: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A (30 more calls, all 0 pre 0 post) That's with the below from Jiri Slaby applied to quell the reboot time explosion. --- drivers/tty/serial/serial_core.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -106,12 +106,17 @@ static inline struct uart_port *uart_por void uart_write_wakeup(struct uart_port *port) { struct uart_state *state = port->state; + struct tty_struct *ttyp; + /* * This means you called this function _after_ the port was * closed. No cookie for you. */ BUG_ON(!state); - tty_wakeup(state->port.tty); + ttyp = tty_port_tty_get(&state->port); + if (ttyp) + tty_wakeup(ttyp); + tty_kref_put(ttyp); } static void uart_stop(struct tty_struct *tty)