Skip to content

Commit

Permalink
[PATCH] vt: Delay the update of the visible console
Browse files Browse the repository at this point in the history
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 <david.hollister@amd.com>
Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
David Hollister authored and Linus Torvalds committed Jun 26, 2006
1 parent 6dbde38 commit 4ee1acc
Showing 1 changed file with 17 additions and 9 deletions.
26 changes: 17 additions & 9 deletions drivers/char/vt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand All @@ -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();
Expand Down

0 comments on commit 4ee1acc

Please sign in to comment.