linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH REPOST] tty: serial: 8250: omap: restore registers on shutdown
@ 2016-01-22 16:28 John Ogness
  2016-01-23 21:25 ` Peter Hurley
  0 siblings, 1 reply; 2+ messages in thread
From: John Ogness @ 2016-01-22 16:28 UTC (permalink / raw)
  To: gregkh
  Cc: peter, bigeasy, tony, nsekhar, peter.ujfalusi, linux-serial,
	linux-kernel

If DMA is active during a shutdown, a delayed restore of the
registers may be pending. The restore must be performed after
the DMA is stopped, otherwise the delayed restore remains
pending and will fire upon the first DMA TX complete of a
totally different serial session.

Signed-off-by: John Ogness <john.ogness@linutronix.de>
---
 This patch was originally posted and discussed here:
 http://lkml.kernel.org/r/87egjp2r4a.fsf@linutronix.de

 The patch was not accepted because Peter expressed dissatisfaction with
 the entire deferred implementation. (This patch fixes a bug in that
 implementation.) However, no alternative solution was determined and the
 bug continues to exist.

 Although we can certainly continue to debate about an alternate solution
 to the deferred implementation, I think it makes sense to at least fix
 the existing bug until an alternative exists.

 The bug can be easily produced with a `kill -9` on a process transmitting
 on the serial port.

 patch against next-20160122

 drivers/tty/serial/8250/8250_omap.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
index a2c0734..0ffec67 100644
--- a/drivers/tty/serial/8250/8250_omap.c
+++ b/drivers/tty/serial/8250/8250_omap.c
@@ -664,9 +664,15 @@ static void omap_8250_shutdown(struct uart_port *port)
 	up->ier = 0;
 	serial_out(up, UART_IER, 0);
 
-	if (up->dma)
+	if (up->dma) {
 		serial8250_release_dma(up);
 
+		if (priv->delayed_restore) {
+			priv->delayed_restore = 0;
+			omap8250_restore_regs(up);
+		}
+	}
+
 	/*
 	 * Disable break condition and FIFOs
 	 */
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH REPOST] tty: serial: 8250: omap: restore registers on shutdown
  2016-01-22 16:28 [PATCH REPOST] tty: serial: 8250: omap: restore registers on shutdown John Ogness
@ 2016-01-23 21:25 ` Peter Hurley
  0 siblings, 0 replies; 2+ messages in thread
From: Peter Hurley @ 2016-01-23 21:25 UTC (permalink / raw)
  To: John Ogness, gregkh
  Cc: bigeasy, tony, nsekhar, peter.ujfalusi, linux-serial, linux-kernel

On 01/22/2016 08:28 AM, John Ogness wrote:
> If DMA is active during a shutdown, a delayed restore of the
> registers may be pending. The restore must be performed after
> the DMA is stopped, otherwise the delayed restore remains
> pending and will fire upon the first DMA TX complete of a
> totally different serial session.
> 
> Signed-off-by: John Ogness <john.ogness@linutronix.de>
> ---
>  This patch was originally posted and discussed here:
>  http://lkml.kernel.org/r/87egjp2r4a.fsf@linutronix.de
> 
>  The patch was not accepted because Peter expressed dissatisfaction with
>  the entire deferred implementation. (This patch fixes a bug in that
>  implementation.) However, no alternative solution was determined and the
>  bug continues to exist.

Yeah, I made that comment a while ago and still no one's fixed that.
What gives?

Regards,
Peter Hurley


>  Although we can certainly continue to debate about an alternate solution
>  to the deferred implementation, I think it makes sense to at least fix
>  the existing bug until an alternative exists.
> 
>  The bug can be easily produced with a `kill -9` on a process transmitting
>  on the serial port.
> 
>  patch against next-20160122
> 
>  drivers/tty/serial/8250/8250_omap.c |    8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
> index a2c0734..0ffec67 100644
> --- a/drivers/tty/serial/8250/8250_omap.c
> +++ b/drivers/tty/serial/8250/8250_omap.c
> @@ -664,9 +664,15 @@ static void omap_8250_shutdown(struct uart_port *port)
>  	up->ier = 0;
>  	serial_out(up, UART_IER, 0);
>  
> -	if (up->dma)
> +	if (up->dma) {
>  		serial8250_release_dma(up);
>  
> +		if (priv->delayed_restore) {
> +			priv->delayed_restore = 0;
> +			omap8250_restore_regs(up);
> +		}
> +	}
> +
>  	/*
>  	 * Disable break condition and FIFOs
>  	 */
> 

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-01-23 21:25 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-22 16:28 [PATCH REPOST] tty: serial: 8250: omap: restore registers on shutdown John Ogness
2016-01-23 21:25 ` Peter Hurley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).