-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a kmsg_dumper, that dumps the kmsg buffer to stdout, when no console is available. This an enables the printing of early panic() calls triggered in uml_postsetup(). When a panic() call happens so early in the UML kernel no earlyprintk/console is available yet, but with a kmsg_dumper in place the kernel message buffer will be outputted to the user, to give a better hint, of what the failure was. Signed-off-by: Thomas Meyer <thomas@m3y3r.de> Signed-off-by: Richard Weinberger <richard@nod.at>
- Loading branch information
Thomas Meyer
authored and
Richard Weinberger
committed
Apr 13, 2015
1 parent
fc9bea0
commit 04a4184
Showing
3 changed files
with
46 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
#include <linux/kmsg_dump.h> | ||
#include <linux/console.h> | ||
#include <shared/init.h> | ||
#include <shared/kern.h> | ||
#include <os.h> | ||
|
||
static void kmsg_dumper_stdout(struct kmsg_dumper *dumper, | ||
enum kmsg_dump_reason reason) | ||
{ | ||
static char line[1024]; | ||
|
||
size_t len = 0; | ||
bool con_available = false; | ||
|
||
/* only dump kmsg when no console is available */ | ||
if (!console_trylock()) | ||
return; | ||
|
||
if (console_drivers != NULL) | ||
con_available = true; | ||
|
||
console_unlock(); | ||
|
||
if (con_available == true) | ||
return; | ||
|
||
printf("kmsg_dump:\n"); | ||
while (kmsg_dump_get_line(dumper, true, line, sizeof(line), &len)) { | ||
line[len] = '\0'; | ||
printf("%s", line); | ||
} | ||
} | ||
|
||
static struct kmsg_dumper kmsg_dumper = { | ||
.dump = kmsg_dumper_stdout | ||
}; | ||
|
||
int __init kmsg_dumper_stdout_init(void) | ||
{ | ||
return kmsg_dump_register(&kmsg_dumper); | ||
} | ||
|
||
__uml_postsetup(kmsg_dumper_stdout_init); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters