diff options
Diffstat (limited to 'drivers/char/vt.c')
-rw-r--r-- | drivers/char/vt.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/char/vt.c b/drivers/char/vt.c index 34bfb056d7a6..82f64ac21191 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c | |||
@@ -705,7 +705,10 @@ void redraw_screen(struct vc_data *vc, int is_switch) | |||
705 | update_attr(vc); | 705 | update_attr(vc); |
706 | clear_buffer_attributes(vc); | 706 | clear_buffer_attributes(vc); |
707 | } | 707 | } |
708 | if (update && vc->vc_mode != KD_GRAPHICS) | 708 | |
709 | /* Forcibly update if we're panicing */ | ||
710 | if ((update && vc->vc_mode != KD_GRAPHICS) || | ||
711 | vt_force_oops_output(vc)) | ||
709 | do_update_region(vc, vc->vc_origin, vc->vc_screenbuf_size / 2); | 712 | do_update_region(vc, vc->vc_origin, vc->vc_screenbuf_size / 2); |
710 | } | 713 | } |
711 | set_cursor(vc); | 714 | set_cursor(vc); |
@@ -743,6 +746,7 @@ static void visual_init(struct vc_data *vc, int num, int init) | |||
743 | vc->vc_hi_font_mask = 0; | 746 | vc->vc_hi_font_mask = 0; |
744 | vc->vc_complement_mask = 0; | 747 | vc->vc_complement_mask = 0; |
745 | vc->vc_can_do_color = 0; | 748 | vc->vc_can_do_color = 0; |
749 | vc->vc_panic_force_write = false; | ||
746 | vc->vc_sw->con_init(vc, init); | 750 | vc->vc_sw->con_init(vc, init); |
747 | if (!vc->vc_complement_mask) | 751 | if (!vc->vc_complement_mask) |
748 | vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800; | 752 | vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800; |
@@ -2506,7 +2510,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count) | |||
2506 | goto quit; | 2510 | goto quit; |
2507 | } | 2511 | } |
2508 | 2512 | ||
2509 | if (vc->vc_mode != KD_TEXT) | 2513 | if (vc->vc_mode != KD_TEXT && !vt_force_oops_output(vc)) |
2510 | goto quit; | 2514 | goto quit; |
2511 | 2515 | ||
2512 | /* undraw cursor first */ | 2516 | /* undraw cursor first */ |
@@ -3784,7 +3788,8 @@ void do_unblank_screen(int leaving_gfx) | |||
3784 | return; | 3788 | return; |
3785 | } | 3789 | } |
3786 | vc = vc_cons[fg_console].d; | 3790 | vc = vc_cons[fg_console].d; |
3787 | if (vc->vc_mode != KD_TEXT) | 3791 | /* Try to unblank in oops case too */ |
3792 | if (vc->vc_mode != KD_TEXT && !vt_force_oops_output(vc)) | ||
3788 | return; /* but leave console_blanked != 0 */ | 3793 | return; /* but leave console_blanked != 0 */ |
3789 | 3794 | ||
3790 | if (blankinterval) { | 3795 | if (blankinterval) { |
@@ -3793,7 +3798,7 @@ void do_unblank_screen(int leaving_gfx) | |||
3793 | } | 3798 | } |
3794 | 3799 | ||
3795 | console_blanked = 0; | 3800 | console_blanked = 0; |
3796 | if (vc->vc_sw->con_blank(vc, 0, leaving_gfx)) | 3801 | if (vc->vc_sw->con_blank(vc, 0, leaving_gfx) || vt_force_oops_output(vc)) |
3797 | /* Low-level driver cannot restore -> do it ourselves */ | 3802 | /* Low-level driver cannot restore -> do it ourselves */ |
3798 | update_screen(vc); | 3803 | update_screen(vc); |
3799 | if (console_blank_hook) | 3804 | if (console_blank_hook) |