vt: bitlock fix
PATCH 1/1 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 <[email protected]>
---
drivers/char/vt.c +5 -3
@@ -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 consnotify_update (vc); quit: -clear_bit (0 , &printing); +spin_unlock (&printing_lock); }static struct tty_driver *vt_console_device (struct console *c,int *index)