aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Cooper <andrew.cooper3@citrix.com>2013-09-27 11:53:26 +0200
committerJan Beulich <jbeulich@suse.com>2013-09-27 11:53:26 +0200
commit0a2210f134fda565c7c3256215694aa2b8a2cebc (patch)
tree75e0b1e1e26aca4ca9bfa5cdb90bb5b55fa3e5b7
parent945b86cb98713cd6039de14597d1bd11bae58314 (diff)
downloadxen-0a2210f134fda565c7c3256215694aa2b8a2cebc.tar.gz
xen-0a2210f134fda565c7c3256215694aa2b8a2cebc.tar.bz2
xen-0a2210f134fda565c7c3256215694aa2b8a2cebc.zip
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> master commit: 66450c1d1ab3c4480bbba949113b95d1ab6a943a master date: 2013-08-06 17:45:00 +0200
-rw-r--r--xen/drivers/char/console.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 7cd7bf6645..bf16d4956e 100644
--- 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(&notify_dom0_con_ring_tasklet);
- }
}
static int printk_prefix_check(char *p, char **pp)