public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Deepak Saxena <dsaxena@plexity.net>
To: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: torvalds@linux-foundation.org
Subject: [PATCH] 8250: Don't restore NS16550 mode when console suspend is disabled
Date: Tue, 12 May 2009 21:00:16 +0000	[thread overview]
Message-ID: <20090512210015.GA25540@plexity.net> (raw)


Commit b5b82df6, from May 2007, breaks no_console_suspend on the OLPC 
XO laptop. Basically what happens is that upon returning from resume, 
serial8250_resume_port() will reconfigure the port for high speed
mode and all console output will be garbled, making debug of the 
resume path painful. This patch modifies serial8250_resume_port() to 
not touch the port in the case where it is the console port and console 
suspend is disabled.

Signed-off-by: Deepak Saxena <dsaxena@laptop.org>

---
The OLPC tree has been carrying a workaround for about two years but
this patch is not the version we've been using. That one can be
found at http://dev.laptop.org/~dsaxena/patches/console_suspend_old.patch.
I prefer the approach of handling this in the 8250 driver itself.

diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
index b4b3981..d4b6373 100644
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -2887,7 +2887,8 @@ void serial8250_resume_port(int line)
 {
 	struct uart_8250_port *up = &serial8250_ports[line];
 
-	if (up->capabilities & UART_NATSEMI) {
+	if ((up->capabilities & UART_NATSEMI) && 
+	     (!uart_console(&up->port) && console_suspend_enabled)) {
 		unsigned char tmp;
 
 		/* Ensure it's still in high speed mode */
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index b0bb29d..05fd868 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -54,12 +54,6 @@ static struct lock_class_key port_lock_key;
 
 #define uart_users(state)	((state)->count + (state)->info.port.blocked_open)
 
-#ifdef CONFIG_SERIAL_CORE_CONSOLE
-#define uart_console(port)	((port)->cons && (port)->cons->index == (port)->line)
-#else
-#define uart_console(port)	(0)
-#endif
-
 static void uart_change_speed(struct uart_state *state,
 					struct ktermios *old_termios);
 static void uart_wait_until_sent(struct tty_struct *tty, int timeout);
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index 57a97e5..9fba77a 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -427,6 +427,12 @@ struct tty_driver *uart_console_device(struct console *co, int *index);
 void uart_console_write(struct uart_port *port, const char *s,
 			unsigned int count,
 			void (*putchar)(struct uart_port *, int));
+#ifdef CONFIG_SERIAL_CORE_CONSOLE
+#define uart_console(port)	((port)->cons && (port)->cons->index == (port)->line)
+#else
+#define uart_console(port)	(0)
+#endif
+
 
 /*
  * Port/driver registration/removal



-- 
In the end, they will not say, "those were dark times,"  they will ask
"why were their poets silent?" - Bertold Brecht


             reply	other threads:[~2009-05-12 21:11 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-12 21:00 Deepak Saxena [this message]
2009-05-12 22:00 ` [PATCH] 8250: Don't restore NS16550 mode when console suspend is disabled Linus Torvalds
2009-05-13  0:18   ` Alan Cox
2009-05-13  0:28     ` Deepak Saxena
2009-05-13  8:44       ` Alan Cox
2009-05-13 14:58         ` Linus Torvalds
2009-05-13 15:35           ` Alan Cox
2009-05-13 18:04             ` Deepak Saxena
2009-05-13 18:46               ` Alan Cox
2009-05-18 18:24                 ` Deepak Saxena
2009-05-18 19:07                   ` Alan Cox
2009-05-13  1:01     ` Joe Perches
2009-05-13  0:34   ` Deepak Saxena
2009-05-12 22:08 ` Michał Mirosław

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090512210015.GA25540@plexity.net \
    --to=dsaxena@plexity.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox