serial: kgdb_nmi: Improve console integration with KDB I/O
authorDaniel Thompson <daniel.thompson@linaro.org>
Thu, 29 May 2014 08:48:46 +0000 (09:48 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2014 18:28:05 +0000 (11:28 -0700)
kgdb_nmi_tty_enabled is used for two unrelated purposes, namely to
suppress normal TTY input handling and to suppress console output
(although it has no effect at all on TTY output). A much better way to
handle muting the console is to not have to mute it in the first place!
That's what this patch does.

Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/kgdb_nmi.c

index 20d21d0..cfadf29 100644 (file)
@@ -44,13 +44,22 @@ MODULE_PARM_DESC(magic, "magic sequence to enter NMI debugger (default $3#33)");
 
 static bool kgdb_nmi_tty_enabled;
 
+static int kgdb_nmi_console_setup(struct console *co, char *options)
+{
+       /* The NMI console uses the dbg_io_ops to issue console messages. To
+        * avoid duplicate messages during kdb sessions we must inform kdb's
+        * I/O utilities that messages sent to the console will automatically
+        * be displayed on the dbg_io.
+        */
+       dbg_io_ops->is_console = true;
+
+       return 0;
+}
+
 static void kgdb_nmi_console_write(struct console *co, const char *s, uint c)
 {
        int i;
 
-       if (!kgdb_nmi_tty_enabled || atomic_read(&kgdb_active) >= 0)
-               return;
-
        for (i = 0; i < c; i++)
                dbg_io_ops->write_char(s[i]);
 }
@@ -65,6 +74,7 @@ static struct tty_driver *kgdb_nmi_console_device(struct console *co, int *idx)
 
 static struct console kgdb_nmi_console = {
        .name   = "ttyNMI",
+       .setup  = kgdb_nmi_console_setup,
        .write  = kgdb_nmi_console_write,
        .device = kgdb_nmi_console_device,
        .flags  = CON_PRINTBUFFER | CON_ANYTIME | CON_ENABLED,