From: James S. <jsi...@us...> - 2001-12-07 00:17:58
|
Update of /cvsroot/linuxconsole/ruby/linux/kernel In directory usw-pr-cvs1:/tmp/cvs-serv16225/kernel Modified Files: printk.c Log Message: More changes over to new console lock. Index: printk.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/kernel/printk.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- printk.c 2001/12/07 00:00:08 1.19 +++ printk.c 2001/12/07 00:17:55 1.20 @@ -286,15 +286,13 @@ */ static void __call_console_drivers(struct console *con, unsigned long start, unsigned long end) { - struct tty_driver *driver = get_tty_driver(con->device(con)); - /* Make sure that we print immediately */ if (oops_in_progress) - init_MUTEX(&driver->tty_lock); + init_MUTEX(&con->lock); - down(&driver->tty_lock); + down(&con->lock); con->write(con, &LOG_BUF(start), end - start); - up(&driver->tty_lock); + up(&con->lock); } /* @@ -396,7 +394,6 @@ unsigned long semi_random; } printk_buf; static int log_level_unknown = 1; - struct tty_driver *driver; unsigned long sr_copy; unsigned long flags; struct console *con; @@ -450,11 +447,8 @@ */ spin_unlock(&console_lock); if ((con->flags & CON_ENABLED) && con->write) { - driver = get_tty_driver(con->device(con)); - if (driver && !down_trylock(&driver->tty_lock)) { - driver->may_schedule = 0; + if (!down_trylock(&con->lock)) release_console_sem(con->device(con)); - } } spin_lock(&console_lock); } @@ -473,14 +467,22 @@ */ void acquire_console_sem(kdev_t device) { - struct tty_driver *driver = get_tty_driver(device); + struct console *con; if (in_interrupt()) BUG(); - - if (driver) { - down(&driver->tty_lock); - driver->may_schedule = 1; + + spin_lock(&console_lock); + /* Look for new messages */ + for (con = console_drivers; con; con = con->next) { + if (con->device(con) == device) + break; + } + spin_unlock(&console_lock); + + if (con) { + down(&con->lock); + //driver->may_schedule = 1; } } EXPORT_SYMBOL(acquire_console_sem); @@ -530,7 +532,9 @@ spin_unlock_irqrestore(&logbuf_lock, flags); if (must_wake_klogd && !oops_in_progress) wake_up_interruptible(&log_wait); + up(&con->lock); } + if (driver) { driver->may_schedule = 0; up(&driver->tty_lock); @@ -567,7 +571,6 @@ */ void register_console(struct console * console) { - struct tty_driver *driver; unsigned long flags; int i; @@ -625,11 +628,7 @@ } spin_unlock(&console_lock); - driver = get_tty_driver(console->device(console)); - if (driver) { - init_MUTEX(&driver->tty_lock); - driver->flags |= TTY_DRIVER_CONSOLE; - } + init_MUTEX(&console->lock); if (console->flags & CON_PRINTBUFFER) { /* |