Skip to content

Commit 7bf6939

Browse files
fabbionetorvalds
authored andcommitted
console: allow to retain boot console via boot option keep_bootcon
On some architectures, the boot process involves de-registering the boot console (early boot), initialize drivers and then re-register the console. This mechanism introduces a window in which no printk can happen on the console and messages are buffered and then printed once the new console is available. If a kernel crashes during this window, all it's left on the boot console is "console [foo] enabled, bootconsole disabled" making debug of the crash rather 'interesting'. By adding "keep_bootcon" option, do not unregister the boot console, that will allow to printk everything that is happening up to the crash. The option is clearly meant only for debugging purposes as it introduces lots of duplicated info printed on console, but will make bug report from users easier as it doesn't require a kernel build just to figure out where we crash. Signed-off-by: Fabio M. Di Nitto <[email protected]> Acked-by: David S. Miller <[email protected]> Cc: Alan Cox <[email protected]> Cc: Greg KH <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 2629760 commit 7bf6939

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

Documentation/kernel-parameters.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,6 +872,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
872872
If specified, z/VM IUCV HVC accepts connections
873873
from listed z/VM user IDs only.
874874

875+
keep_bootcon [KNL]
876+
Do not unregister boot console at start. This is only
877+
useful for debugging when something happens in the window
878+
between unregistering the boot console and initializing
879+
the real console.
880+
875881
i2c_bus= [HW] Override the default board specific I2C bus speed
876882
or register an additional I2C bus that is not
877883
registered from board initialization code.

kernel/printk.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1316,6 +1316,18 @@ void console_start(struct console *console)
13161316
}
13171317
EXPORT_SYMBOL(console_start);
13181318

1319+
static int __read_mostly keep_bootcon;
1320+
1321+
static int __init keep_bootcon_setup(char *str)
1322+
{
1323+
keep_bootcon = 1;
1324+
printk(KERN_INFO "debug: skip boot console de-registration.\n");
1325+
1326+
return 0;
1327+
}
1328+
1329+
early_param("keep_bootcon", keep_bootcon_setup);
1330+
13191331
/*
13201332
* The console driver calls this routine during kernel initialization
13211333
* to register the console printing procedure with printk() and to
@@ -1463,7 +1475,9 @@ void register_console(struct console *newcon)
14631475
* users know there might be something in the kernel's log buffer that
14641476
* went to the bootconsole (that they do not see on the real console)
14651477
*/
1466-
if (bcon && ((newcon->flags & (CON_CONSDEV | CON_BOOT)) == CON_CONSDEV)) {
1478+
if (bcon &&
1479+
((newcon->flags & (CON_CONSDEV | CON_BOOT)) == CON_CONSDEV) &&
1480+
!keep_bootcon) {
14671481
/* we need to iterate through twice, to make sure we print
14681482
* everything out, before we unregister the console(s)
14691483
*/

0 commit comments

Comments
 (0)