console: Properly switch consoles for screen dumps
PATCH 1/1 console: Properly switch consoles for screen dumps
From: Jan Kiszka <[email protected]>
Do not mess with active_console, use console_select instead. This fixes corrupt virtual monitor consoles after issuing the screendump command.
---
Looks still weird - we should enable dumping to an invisible display buffer - but it cures this symptom without rewriting the whole console code.
console.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-)
console.c +10 -3
@@ -115,6 +115,7 @@ typedef enum {/* ??? This is mis-named. It is used for both text and graphical consoles. */ struct TextConsole { +int index;console_type_t console_type;DisplayState *ds;/* Graphic console state. */
@@ -177,12 +178,15 @@ void vga_hw_screen_dump(const char *filename)TextConsole *previous_active_console; previous_active_console = active_console; - active_console = consoles[0 ]; +/* There is currently no way of specifying which screen we want to dump, so always dump the first one. */ -if (consoles[0 ] && consoles[0 ]->hw_screen_dump) +console_select (0 ); +if (consoles[0 ] && consoles[0 ]->hw_screen_dump) { consoles[0 ]->hw_screen_dump (consoles[0 ]->hw, filename); - active_console = previous_active_console; + } + +console_select (previous_active_console->index); }void vga_hw_text_update (console_ch_t *chardata)
@@ -1247,6 +1251,7 @@ static TextConsole *new_console(DisplayState *ds, console_type_t console_type) s->ds = ds; s->console_type = console_type;if (console_type !=GRAPHIC_CONSOLE ) { + s->index = nb_consoles; consoles[nb_consoles++] = s; }else {/* HACK: Put graphical consoles before text consoles. */
@@ -1254,7 +1259,9 @@ static TextConsole *new_console(DisplayState *ds, console_type_t console_type)if (consoles[i -1 ]->console_type ==GRAPHIC_CONSOLE )break ; consoles[i] = consoles[i -1 ]; + consoles[i]->index = i; } + s->index = i; consoles[i] = s; nb_consoles++; }
on 16/09/2011 01:48 Jan Kiszka said the following:
Quoted 11 lines
From: Jan Kiszka <[email protected]>
Do not mess with
active_console, useconsole_selectinstead. This fixes corrupt virtual monitor consoles after issuing the screendump command.Signed-off-by Jan Kiszka <[email protected]>---
Looks still weird - we should enable dumping to an invisible display buffer - but it cures this symptom without rewriting the whole console code.
Yeah, there is a momentary flicker during the dump. But I happy that the monitor console is not garbled now. Thank you!
Quoted 52 lines
console.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-)console.c +10
-3@@ -115,6 +115,7 @@ typedef enum {/* ??? This is mis-named. It is used for both text and graphical consoles. */ struct TextConsole { +int index;console_type_t console_type;DisplayState *ds;/* Graphic console state. */ @@ -177,12 +178,15 @@ void vga_hw_screen_dump(const char *filename)TextConsole *previous_active_console; previous_active_console = active_console; - active_console = consoles[0 ]; +/* There is currently no way of specifying which screen we want to dump, so always dump the first one. */ -if (consoles[0 ] && consoles[0 ]->hw_screen_dump) +console_select (0 ); +if (consoles[0 ] && consoles[0 ]->hw_screen_dump) { consoles[0 ]->hw_screen_dump (consoles[0 ]->hw, filename); - active_console = previous_active_console; + } + +console_select (previous_active_console->index); }void vga_hw_text_update (console_ch_t *chardata)@@ -1247,6 +1251,7 @@ static TextConsole *new_console(DisplayState *ds, console_type_t console_type) s->ds = ds; s->console_type = console_type;if (console_type !=GRAPHIC_CONSOLE ) { + s->index = nb_consoles; consoles[nb_consoles++] = s; }else {/* HACK: Put graphical consoles before text consoles. */ @@ -1254,7 +1259,9 @@ static TextConsole *new_console(DisplayState *ds, console_type_t console_type)if (consoles[i -1 ]->console_type ==GRAPHIC_CONSOLE )break ; consoles[i] = consoles[i -1 ]; + consoles[i]->index = i; } + s->index = i; consoles[i] = s; nb_consoles++; }
Signature · 1 line
Andriy Gapon
Anthony Liguori
AppliedQuoted 6 lines · Jan Kiszka
From: Jan Kiszka<[email protected]>
Do not mess with
active_console, useconsole_selectinstead. This fixes corrupt virtual monitor consoles after issuing the screendump command.Signed-off-by Jan Kiszka<[email protected]>
Applied. Thanks.
Regards,
Anthony Liguori
Quoted 60 lines
---
Looks still weird - we should enable dumping to an invisible display buffer - but it cures this symptom without rewriting the whole console code.
console.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-)console.c +10
-3@@ -115,6 +115,7 @@ typedef enum {/* ??? This is mis-named. It is used for both text and graphical consoles. */ struct TextConsole { +int index;console_type_t console_type;DisplayState *ds;/* Graphic console state. */ @@ -177,12 +178,15 @@ void vga_hw_screen_dump(const char *filename)TextConsole *previous_active_console; previous_active_console = active_console; - active_console = consoles[0 ]; +/* There is currently no way of specifying which screen we want to dump, so always dump the first one. */ -if (consoles[0 ]&& consoles[0 ]->hw_screen_dump) +console_select (0 ); +if (consoles[0 ]&& consoles[0 ]->hw_screen_dump) { consoles[0 ]->hw_screen_dump (consoles[0 ]->hw, filename); - active_console = previous_active_console; + } + +console_select (previous_active_console->index); }void vga_hw_text_update (console_ch_t *chardata)@@ -1247,6 +1251,7 @@ static TextConsole *new_console(DisplayState *ds, console_type_t console_type) s->ds = ds; s->console_type = console_type;if (console_type !=GRAPHIC_CONSOLE ) { + s->index = nb_consoles; consoles[nb_consoles++] = s; }else {/* HACK: Put graphical consoles before text consoles. */ @@ -1254,7 +1259,9 @@ static TextConsole *new_console(DisplayState *ds, console_type_t console_type)if (consoles[i -1 ]->console_type ==GRAPHIC_CONSOLE )break ; consoles[i] = consoles[i -1 ]; + consoles[i]->index = i; } + s->index = i; consoles[i] = s; nb_consoles++; }