41 lines
1.4 KiB
Diff
41 lines
1.4 KiB
Diff
|
# Commit 66450c1d1ab3c4480bbba949113b95d1ab6a943a
|
||
|
# Date 2013-08-06 17:45:00 +0200
|
||
|
# Author Andrew Cooper <andrew.cooper3@citrix.com>
|
||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||
|
xen/conring: Write to console ring even if console lock is busted
|
||
|
|
||
|
console_lock_busted gets set when an NMI/MCE/Double Fault handler decides to
|
||
|
bring Xen down in an emergency. conring_puts() cannot block and does
|
||
|
not have problematic interactions with the console_lock.
|
||
|
|
||
|
Therefore, choosing to not put the string into the console ring simply means
|
||
|
that the kexec environment cant find any panic() message caused by an IST
|
||
|
interrupt, which is unhelpful for debugging purposes.
|
||
|
|
||
|
In the case that two pcpus fight with console_force_unlock(), having slightly
|
||
|
garbled strings in the console ring is far more useful than having nothing at
|
||
|
all.
|
||
|
|
||
|
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||
|
Acked-by: Matt Wilson <msw@amazon.com>
|
||
|
Acked-by: Keir Fraser <keir@xen.org>
|
||
|
|
||
|
--- a/xen/drivers/char/console.c
|
||
|
+++ b/xen/drivers/char/console.c
|
||
|
@@ -463,12 +463,11 @@ static void __putstr(const char *str)
|
||
|
sercon_puts(str);
|
||
|
video_puts(str);
|
||
|
|
||
|
+ while ( (c = *str++) != '\0' )
|
||
|
+ putchar_console_ring(c);
|
||
|
+
|
||
|
if ( !console_locks_busted )
|
||
|
- {
|
||
|
- while ( (c = *str++) != '\0' )
|
||
|
- putchar_console_ring(c);
|
||
|
tasklet_schedule(¬ify_dom0_con_ring_tasklet);
|
||
|
- }
|
||
|
}
|
||
|
|
||
|
static int printk_prefix_check(char *p, char **pp)
|