Messages in this thread Patch in this message | | | Date | Tue, 20 Nov 2007 06:14:47 +0100 | From | Nick Piggin <> | Subject | [patch] vt: bitlock fix |
| |
Don't know who maintains vt.c, but Antonino's name comes up regularly ;)
-- vt is missing a memory barrier to close the critical section. Use a real spinlock for this.
Signed-off-by: Nick Piggin <npiggin@suse.de> --- Index: linux-2.6/drivers/char/vt.c =================================================================== --- linux-2.6.orig/drivers/char/vt.c +++ linux-2.6/drivers/char/vt.c @@ -2400,13 +2400,15 @@ static void vt_console_print(struct cons { struct vc_data *vc = vc_cons[fg_console].d; unsigned char c; - static unsigned long printing; + static DEFINE_SPINLOCK(printing_lock); const ushort *start; ushort cnt = 0; ushort myx; /* console busy or not yet initialized */ - if (!printable || test_and_set_bit(0, &printing)) + if (!printable) + return; + if (!spin_trylock(&printing_lock)) return; if (kmsg_redirect && vc_cons_allocated(kmsg_redirect - 1)) @@ -2481,7 +2483,7 @@ static void vt_console_print(struct cons notify_update(vc); quit: - clear_bit(0, &printing); + spin_unlock(&printing_lock); } static struct tty_driver *vt_console_device(struct console *c, int *index) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |