From 4ee1acce49d616e0e3fbff76fa1dea0c7350535d Mon Sep 17 00:00:00 2001 From: David Hollister Date: Mon, 26 Jun 2006 00:26:41 -0700 Subject: [PATCH] [PATCH] vt: Delay the update of the visible console Delay the update of the visible framebuffer console until all other consoles have been initialized in order to avoid losing information. This only seems to be a problem with modules, not with built-in drivers. Signed-off-by: David Hollister Signed-off-by: Jordan Crouse Signed-off-by: Antonino Daplas Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- drivers/char/vt.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/drivers/char/vt.c b/drivers/char/vt.c index 6c94879e0b99..eb27eed48a86 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c @@ -2665,7 +2665,7 @@ int __init vty_init(void) int take_over_console(const struct consw *csw, int first, int last, int deflt) { - int i, j = -1; + int i, j = -1, k = -1; const char *desc; struct module *owner; @@ -2701,8 +2701,11 @@ int take_over_console(const struct consw *csw, int first, int last, int deflt) continue; j = i; - if (CON_IS_VISIBLE(vc)) + if (CON_IS_VISIBLE(vc)) { + k = i; save_screen(vc); + } + old_was_color = vc->vc_can_do_color; vc->vc_sw->con_deinit(vc); vc->vc_origin = (unsigned long)vc->vc_screenbuf; @@ -2718,18 +2721,23 @@ int take_over_console(const struct consw *csw, int first, int last, int deflt) */ if (old_was_color != vc->vc_can_do_color) clear_buffer_attributes(vc); - - if (CON_IS_VISIBLE(vc)) - update_screen(vc); } + printk("Console: switching "); if (!deflt) printk("consoles %d-%d ", first+1, last+1); - if (j >= 0) + if (j >= 0) { + struct vc_data *vc = vc_cons[j].d; + printk("to %s %s %dx%d\n", - vc_cons[j].d->vc_can_do_color ? "colour" : "mono", - desc, vc_cons[j].d->vc_cols, vc_cons[j].d->vc_rows); - else + vc->vc_can_do_color ? "colour" : "mono", + desc, vc->vc_cols, vc->vc_rows); + + if (k >= 0) { + vc = vc_cons[k].d; + update_screen(vc); + } + } else printk("to %s\n", desc); release_console_sem(); -- 2.20.1