From ccb48d1b6d303a3d73bb86c8c4b226fc9c523786 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 2 Jul 2018 13:51:24 +0200 Subject: [PATCH] Add patches from upstream fixing details view on kernels build with CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER --- ...-reactivating-renderer-without-closi.patch | 36 ++++++++++ ...vice_manager_deactivate_renderers-in.patch | 61 +++++++++++++++++ ...activate-renderers-if-the-splash-use.patch | 66 +++++++++++++++++++ plymouth.spec | 12 +++- 4 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 0001-renderer-support-reactivating-renderer-without-closi.patch create mode 100644 0002-main-move-ply_device_manager_deactivate_renderers-in.patch create mode 100644 0003-show_theme-Only-activate-renderers-if-the-splash-use.patch diff --git a/0001-renderer-support-reactivating-renderer-without-closi.patch b/0001-renderer-support-reactivating-renderer-without-closi.patch new file mode 100644 index 0000000..0583a9a --- /dev/null +++ b/0001-renderer-support-reactivating-renderer-without-closi.patch @@ -0,0 +1,36 @@ +From eb147e52b123070ab8839c3f59aaecc43fcc8652 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Mon, 25 Jun 2018 22:02:07 +0200 +Subject: [PATCH 1/3] renderer: support reactivating renderer without closing + it first + +At the moment, ply_renderer_activate() doesn't work immediately following +ply_renderer_deactivate(). This is because the renderer isn't marked +inactive until it's closed. + +This commit marks the renderer inactive when it's deactivated. + +Signed-off-by: Hans de Goede + +https://bugs.freedesktop.org/show_bug.cgi?id=107047 +--- + src/libply-splash-core/ply-renderer.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/libply-splash-core/ply-renderer.c b/src/libply-splash-core/ply-renderer.c +index b9059ef..ecf7082 100644 +--- a/src/libply-splash-core/ply-renderer.c ++++ b/src/libply-splash-core/ply-renderer.c +@@ -314,7 +314,8 @@ ply_renderer_deactivate (ply_renderer_t *renderer) + { + assert (renderer->plugin_interface != NULL); + +- return renderer->plugin_interface->deactivate (renderer->backend); ++ renderer->plugin_interface->deactivate (renderer->backend); ++ renderer->is_active = false; + } + + bool +-- +2.17.1 + diff --git a/0002-main-move-ply_device_manager_deactivate_renderers-in.patch b/0002-main-move-ply_device_manager_deactivate_renderers-in.patch new file mode 100644 index 0000000..46368a6 --- /dev/null +++ b/0002-main-move-ply_device_manager_deactivate_renderers-in.patch @@ -0,0 +1,61 @@ +From 778e0fb77a9dfb85270242f1238eba237488eb48 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Mon, 25 Jun 2018 16:55:39 +0200 +Subject: [PATCH 2/3] main: move ply_device_manager_deactivate_renderers() into + hide_splash() + +hide_splash() should be the counter-part of show_splash(). show_splash() +calls ply_device_manager_activate_renderers() (through show_theme()). + +2 of the 3 callers of hide_splash() are already calling +ply_device_manager_deactivate_renderers() directly before calling +hide_splash(). This commit moves the deactivate call into hide_splash() +so that it also gets called from the 3th code-path, which is when +the user hits the escape to key to toggle from the splash to details. + +It's important that plymouth deactivates its renderers before going +to details, because those renderers can block the kernel from +initializing fbcon, which the kernel will start doing lazily in the +future: + +https://lkml.org/lkml/2018/6/26/489. + +Signed-off-by: Hans de Goede + +https://bugs.freedesktop.org/show_bug.cgi?id=107047 +--- + src/main.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/main.c b/src/main.c +index 841fe6b..ff02ea6 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -1174,6 +1174,8 @@ quit_splash (state_t *state) + static void + hide_splash (state_t *state) + { ++ ply_device_manager_deactivate_renderers (state->device_manager); ++ + state->is_shown = false; + + cancel_pending_delayed_show (state); +@@ -1193,7 +1195,6 @@ dump_details_and_quit_splash (state_t *state) + state->showing_details = false; + toggle_between_splash_and_details (state); + +- ply_device_manager_deactivate_renderers (state->device_manager); + hide_splash (state); + quit_splash (state); + } +@@ -1291,7 +1292,6 @@ on_boot_splash_idle (state_t *state) + if (state->quit_trigger != NULL) { + if (!state->should_retain_splash) { + ply_trace ("hiding splash"); +- ply_device_manager_deactivate_renderers (state->device_manager); + hide_splash (state); + } + +-- +2.17.1 + diff --git a/0003-show_theme-Only-activate-renderers-if-the-splash-use.patch b/0003-show_theme-Only-activate-renderers-if-the-splash-use.patch new file mode 100644 index 0000000..bb9795d --- /dev/null +++ b/0003-show_theme-Only-activate-renderers-if-the-splash-use.patch @@ -0,0 +1,66 @@ +From 353d12806adf6be4d051d491a2af28e3b24b3063 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Mon, 2 Jul 2018 09:39:12 +0200 +Subject: [PATCH 3/3] show_theme: Only activate renderers if the splash uses + pixel-displays + +Since commit eb147e52b123 ("renderer: support reactivating renderer without +closing it first"), the show_theme() call done by +toggle_between_splash_and_details() will reactivate the renderers after +switching to details mode, causing the drm renderer to switch the screen +from text to graphics mode hiding the details being logged on the console. + +This commit fixes this by making show_theme() not call +ply_device_manager_activate_renderers() if the splash does not uses +pixel-displays. + +Signed-off-by: Hans de Goede +--- + src/libply-splash-core/ply-boot-splash.c | 5 +++++ + src/libply-splash-core/ply-boot-splash.h | 1 + + src/main.c | 3 ++- + 3 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/libply-splash-core/ply-boot-splash.c b/src/libply-splash-core/ply-boot-splash.c +index 87a7a0c..7888785 100644 +--- a/src/libply-splash-core/ply-boot-splash.c ++++ b/src/libply-splash-core/ply-boot-splash.c +@@ -695,4 +695,9 @@ ply_boot_splash_become_idle (ply_boot_splash_t *splash, + splash->plugin_interface->become_idle (splash->plugin, splash->idle_trigger); + } + ++bool ply_boot_splash_uses_pixel_displays (ply_boot_splash_t *splash) ++{ ++ return splash->plugin_interface->add_pixel_display != NULL; ++} ++ + /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */ +diff --git a/src/libply-splash-core/ply-boot-splash.h b/src/libply-splash-core/ply-boot-splash.h +index b66ca47..0bdbe96 100644 +--- a/src/libply-splash-core/ply-boot-splash.h ++++ b/src/libply-splash-core/ply-boot-splash.h +@@ -89,6 +89,7 @@ void ply_boot_splash_attach_progress (ply_boot_splash_t *splash, + void ply_boot_splash_become_idle (ply_boot_splash_t *splash, + ply_boot_splash_on_idle_handler_t idle_handler, + void *user_data); ++bool ply_boot_splash_uses_pixel_displays (ply_boot_splash_t *splash); + + + #endif +diff --git a/src/main.c b/src/main.c +index ff02ea6..13848c1 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -1763,7 +1763,8 @@ show_theme (state_t *state, + return NULL; + + attach_splash_to_devices (state, splash); +- ply_device_manager_activate_renderers (state->device_manager); ++ if (ply_boot_splash_uses_pixel_displays (splash)) ++ ply_device_manager_activate_renderers (state->device_manager); + + splash_mode = get_splash_mode_from_mode (state->mode); + +-- +2.17.1 + diff --git a/plymouth.spec b/plymouth.spec index 75f3ea7..0216086 100644 --- a/plymouth.spec +++ b/plymouth.spec @@ -16,7 +16,7 @@ Summary: Graphical Boot Animation and Logger Name: plymouth Version: 0.9.3 -Release: 9%{?snapshot_rel}%{?dist} +Release: 10%{?snapshot_rel}%{?dist} License: GPLv2+ URL: http://www.freedesktop.org/wiki/Software/Plymouth Group: System Environment/Base @@ -43,6 +43,12 @@ Patch8: 0001-device-manager-skip-graphical-renderer-setup-when-de.patch # Patch from upstream fixes boot with rhgb but no renderers available Patch9: 0001-device-manager-fall-back-to-text-mode-if-graphical-d.patch +# Patches from upstream to fix details view on kernels build with +# CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER +Patch10: 0001-renderer-support-reactivating-renderer-without-closi.patch +Patch11: 0002-main-move-ply_device_manager_deactivate_renderers-in.patch +Patch12: 0003-show_theme-Only-activate-renderers-if-the-splash-use.patch + BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(libudev) BuildRequires: kernel-headers @@ -464,6 +470,10 @@ fi %files system-theme %changelog +* Mon Jul 02 2018 Hans de Goede - 0.9.3-10 +- Add patches from upstream fixing details view on kernels build with + CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER + * Wed Jun 06 2018 Adam Williamson - 0.9.3-9 - Backport patch to avoid loading renderers on non-rhgb boot - Backport patch to handle 'rhgb' but no renderers available