aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/vt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/vt.c')
-rw-r--r--drivers/char/vt.c13
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)