vt: bitlock fix
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> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
5bd91f18be
Коммит
b0940003f2
|
@ -2400,13 +2400,15 @@ static void vt_console_print(struct console *co, const char *b, unsigned count)
|
|||
{
|
||||
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 console *co, const char *b, unsigned count)
|
|||
notify_update(vc);
|
||||
|
||||
quit:
|
||||
clear_bit(0, &printing);
|
||||
spin_unlock(&printing_lock);
|
||||
}
|
||||
|
||||
static struct tty_driver *vt_console_device(struct console *c, int *index)
|
||||
|
|
Загрузка…
Ссылка в новой задаче