mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 21:54:11 +08:00
[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 <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>
This commit is contained in:
parent
6dbde380ca
commit
4ee1acce49
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user