kgdboc: Add ekgdboc for early use of the kernel debugger
authorJason Wessel <jason.wessel@windriver.com>
Fri, 21 May 2010 02:04:30 +0000 (21:04 -0500)
committerJason Wessel <jason.wessel@windriver.com>
Fri, 21 May 2010 02:04:30 +0000 (21:04 -0500)
The ekgdboc= differs from kgdboc= in that you can begin debuggin as
soon as the exceptions are setup and the kgdb I/O driver is available,
instead of waiting until the tty subsystem is available.

CC: kgdb-bugreport@lists.sourceforge.net
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Documentation/kernel-parameters.txt
drivers/serial/kgdboc.c

index bdce359820bb1683160931644836b25efe0b8af3..4c44d01c67f43f8cd7bd2108c5aa1297f7122a79 100644 (file)
@@ -713,6 +713,12 @@ and is between 256 and 4096 characters. It is defined in the file
                        The VGA output is eventually overwritten by the real
                        console.
 
                        The VGA output is eventually overwritten by the real
                        console.
 
+       ekgdboc=        [X86,KGDB] Allow early kernel console debugging
+                       ekgdboc=kbd
+
+                       This is desgined to be used in conjunction with
+                       the boot argument: earlyprintk=vga
+
        eata=           [HW,SCSI]
 
        edd=            [EDD]
        eata=           [HW,SCSI]
 
        edd=            [EDD]
index b765ab48dfe7aa9d1f9b771335e34e4c5695f14d..a9a94ae7234951f3b30b25829c67d1ee13a3a8f2 100644 (file)
@@ -223,6 +223,25 @@ static struct kgdb_io kgdboc_io_ops = {
        .post_exception         = kgdboc_post_exp_handler,
 };
 
        .post_exception         = kgdboc_post_exp_handler,
 };
 
+#ifdef CONFIG_KGDB_SERIAL_CONSOLE
+/* This is only available if kgdboc is a built in for early debugging */
+int __init kgdboc_early_init(char *opt)
+{
+       /* save the first character of the config string because the
+        * init routine can destroy it.
+        */
+       char save_ch;
+
+       kgdboc_option_setup(opt);
+       save_ch = config[0];
+       init_kgdboc();
+       config[0] = save_ch;
+       return 0;
+}
+
+early_param("ekgdboc", kgdboc_early_init);
+#endif /* CONFIG_KGDB_SERIAL_CONSOLE */
+
 module_init(init_kgdboc);
 module_exit(cleanup_kgdboc);
 module_param_call(kgdboc, param_set_kgdboc_var, param_get_string, &kps, 0644);
 module_init(init_kgdboc);
 module_exit(cleanup_kgdboc);
 module_param_call(kgdboc, param_set_kgdboc_var, param_get_string, &kps, 0644);