[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Avoid deadlock in tasklet_schedule() after console_force_unlock().
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1236592576 0 # Node ID f57ac4af36b431b10645ee145270ee658f46d58d # Parent 5997e86988f6800eed360d6858a419eede556d6b Avoid deadlock in tasklet_schedule() after console_force_unlock(). Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> --- xen/drivers/char/console.c | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) diff -r 5997e86988f6 -r f57ac4af36b4 xen/drivers/char/console.c --- a/xen/drivers/char/console.c Mon Mar 09 09:49:50 2009 +0000 +++ b/xen/drivers/char/console.c Mon Mar 09 09:56:16 2009 +0000 @@ -420,6 +420,8 @@ long do_console_io(int cmd, int count, X * ***************************************************** */ +static bool_t console_locks_busted; + static void __putstr(const char *str) { int c; @@ -429,10 +431,12 @@ static void __putstr(const char *str) sercon_puts(str); vga_puts(str); - while ( (c = *str++) != '\0' ) - putchar_console_ring(c); - - tasklet_schedule(¬ify_dom0_con_ring_tasklet); + 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) @@ -665,6 +669,7 @@ void console_force_unlock(void) { spin_lock_init(&console_lock); serial_force_unlock(sercon_handle); + console_locks_busted = 1; console_start_sync(); } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |