diff options
Diffstat (limited to '0011-bootsplash.patch')
-rw-r--r-- | 0011-bootsplash.patch | 99 |
1 files changed, 19 insertions, 80 deletions
diff --git a/0011-bootsplash.patch b/0011-bootsplash.patch index d6c6db659c56..add68e7b275c 100644 --- a/0011-bootsplash.patch +++ b/0011-bootsplash.patch @@ -1,82 +1,21 @@ -diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c -index 2ebaba16f785..416735ab6dc1 100644 ---- a/drivers/tty/vt/vt.c -+++ b/drivers/tty/vt/vt.c -@@ -105,6 +105,7 @@ - #include <linux/ctype.h> - #include <linux/bsearch.h> - #include <linux/gcd.h> -+#include <linux/bootsplash.h> - - #define MAX_NR_CON_DRIVER 16 - -@@ -4235,6 +4236,7 @@ void do_unblank_screen(int leaving_gfx) - } - - console_blanked = 0; -+ bootsplash_mark_dirty(); - if (vc->vc_sw->con_blank(vc, 0, leaving_gfx)) - /* Low-level driver cannot restore -> do it ourselves */ - update_screen(vc); -diff --git a/drivers/video/fbdev/core/bootsplash.c b/drivers/video/fbdev/core/bootsplash.c -index c8642142cfea..13fcaabbc2ca 100644 ---- a/drivers/video/fbdev/core/bootsplash.c -+++ b/drivers/video/fbdev/core/bootsplash.c -@@ -165,6 +165,13 @@ bool bootsplash_would_render_now(void) - && bootsplash_is_enabled(); - } - -+void bootsplash_mark_dirty(void) -+{ -+ mutex_lock(&splash_state.data_lock); -+ splash_state.splash_fb = NULL; -+ mutex_unlock(&splash_state.data_lock); -+} -+ - bool bootsplash_is_enabled(void) - { - bool was_enabled; -@@ -206,9 +213,7 @@ void bootsplash_enable(void) - - if (!was_enabled) { - /* Force a full redraw when the splash is re-activated */ -- mutex_lock(&splash_state.data_lock); -- splash_state.splash_fb = NULL; -- mutex_unlock(&splash_state.data_lock); -+ bootsplash_mark_dirty(); - - schedule_work(&splash_state.work_redraw_vc); - } -@@ -272,9 +277,7 @@ static int splash_resume(struct device *device) - * Force full redraw on resume since we've probably lost the - * framebuffer's contents meanwhile - */ -- mutex_lock(&splash_state.data_lock); -- splash_state.splash_fb = NULL; -- mutex_unlock(&splash_state.data_lock); -+ bootsplash_mark_dirty(); - - if (bootsplash_would_render_now()) - schedule_work(&splash_state.work_redraw_vc); -diff --git a/include/linux/bootsplash.h b/include/linux/bootsplash.h -index c6dd0b43180d..4075098aaadd 100644 ---- a/include/linux/bootsplash.h -+++ b/include/linux/bootsplash.h -@@ -19,6 +19,8 @@ extern void bootsplash_render_full(struct fb_info *info); - - extern bool bootsplash_would_render_now(void); - -+extern void bootsplash_mark_dirty(void); +diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c +index 9a39a6fcfe98..8a9c67e1c5d8 100644 +--- a/drivers/video/fbdev/core/fbcon.c ++++ b/drivers/video/fbdev/core/fbcon.c +@@ -1343,6 +1343,16 @@ static void fbcon_cursor(struct vc_data *vc, int mode) + int y; + int c = scr_readw((u16 *) vc->vc_pos); + ++ /* ++ * Disable the splash here so we don't have to hook into ++ * vt_console_print() in drivers/tty/vt/vt.c ++ * ++ * We'd disable the splash just before the call to ++ * hide_cursor() anyway, so this spot is just fine. ++ */ ++ if (oops_in_progress) ++ bootsplash_disable(); + - extern bool bootsplash_is_enabled(void); - extern void bootsplash_disable(void); - extern void bootsplash_enable(void); -@@ -31,6 +33,8 @@ extern void bootsplash_init(void); - - #define bootsplash_would_render_now() (false) + ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms); -+#define bootsplash_mark_dirty() -+ - #define bootsplash_is_enabled() (false) - #define bootsplash_disable() - #define bootsplash_enable() + if (fbcon_is_inactive(vc, info) || vc->vc_deccm != 1) |