plymouth rebuild
This commit is contained in:
+58
@@ -0,0 +1,58 @@
|
||||
From e6f09b05707be8aec488d757c5abe56cb3060a75 Mon Sep 17 00:00:00 2001
|
||||
From: Adam Williamson <awilliam@redhat.com>
|
||||
Date: Sat, 16 Mar 2024 17:22:57 -0700
|
||||
Subject: [PATCH] Revert "src: Hide console text when splash is requested"
|
||||
|
||||
This reverts commit 48881ba2ef3d25fd27fd150d4d5957d4df9868e0.
|
||||
It breaks display entirely on minimal installs.
|
||||
---
|
||||
src/libply-splash-core/ply-terminal.c | 2 --
|
||||
src/main.c | 12 ++++--------
|
||||
2 files changed, 4 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-terminal.c b/src/libply-splash-core/ply-terminal.c
|
||||
index 1a9ec353..2036e507 100644
|
||||
--- a/src/libply-splash-core/ply-terminal.c
|
||||
+++ b/src/libply-splash-core/ply-terminal.c
|
||||
@@ -357,8 +357,6 @@ ply_terminal_write (ply_terminal_t *terminal,
|
||||
assert (terminal != NULL);
|
||||
assert (format != NULL);
|
||||
|
||||
- ply_terminal_set_mode (terminal, PLY_TERMINAL_MODE_TEXT);
|
||||
-
|
||||
string = NULL;
|
||||
va_start (args, format);
|
||||
size = vasprintf (&string, format, args);
|
||||
diff --git a/src/main.c b/src/main.c
|
||||
index 33fe51e0..81e34c54 100644
|
||||
--- a/src/main.c
|
||||
+++ b/src/main.c
|
||||
@@ -1000,14 +1000,6 @@ on_show_splash (state_t *state)
|
||||
if (!state->is_attached && state->should_be_attached && has_displays)
|
||||
attach_to_running_session (state);
|
||||
|
||||
- if (state->local_console_terminal != NULL)
|
||||
- ply_terminal_set_mode (state->local_console_terminal, PLY_TERMINAL_MODE_GRAPHICS);
|
||||
-
|
||||
-#ifdef PLY_ENABLE_SYSTEMD_INTEGRATION
|
||||
- if (state->is_attached)
|
||||
- tell_systemd_to_print_details (state);
|
||||
-#endif
|
||||
-
|
||||
if (has_displays) {
|
||||
ply_trace ("at least one display already available, so loading splash");
|
||||
show_splash (state);
|
||||
@@ -1438,6 +1430,10 @@ on_quit (state_t *state,
|
||||
state->quit_trigger = quit_trigger;
|
||||
state->should_retain_splash = retain_splash;
|
||||
|
||||
+#ifdef PLY_ENABLE_SYSTEMD_INTEGRATION
|
||||
+ tell_systemd_to_stop_printing_details (state);
|
||||
+#endif
|
||||
+
|
||||
ply_trace ("closing log");
|
||||
if (state->session != NULL)
|
||||
ply_terminal_session_close_log (state->session);
|
||||
--
|
||||
2.44.0
|
||||
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From 10ac8d2dc927b112ce6aeb06bc73d9c46550954c Mon Sep 17 00:00:00 2001
|
||||
From: n3rdopolis <bluescreen_avenger@verizon.net>
|
||||
Date: Tue, 6 Feb 2024 18:52:25 -0500
|
||||
Subject: [PATCH] ply-boot-splash: Set unbuffered input when creating a text
|
||||
display
|
||||
|
||||
---
|
||||
src/libply-splash-core/ply-boot-splash.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-boot-splash.c b/src/libply-splash-core/ply-boot-splash.c
|
||||
index 12fb6c10..217f455e 100644
|
||||
--- a/src/libply-splash-core/ply-boot-splash.c
|
||||
+++ b/src/libply-splash-core/ply-boot-splash.c
|
||||
@@ -173,6 +173,7 @@ ply_boot_splash_add_text_display (ply_boot_splash_t *splash,
|
||||
ply_text_display_t *display)
|
||||
{
|
||||
int number_of_columns, number_of_rows;
|
||||
+ ply_terminal_t *terminal;
|
||||
|
||||
if (splash->plugin_interface->add_text_display == NULL)
|
||||
return;
|
||||
@@ -183,6 +184,11 @@ ply_boot_splash_add_text_display (ply_boot_splash_t *splash,
|
||||
ply_trace ("adding %dx%d text display", number_of_columns, number_of_rows);
|
||||
|
||||
splash->plugin_interface->add_text_display (splash->plugin, display);
|
||||
+
|
||||
+ terminal = ply_text_display_get_terminal (display);
|
||||
+ if (terminal)
|
||||
+ ply_terminal_set_unbuffered_input (terminal);
|
||||
+
|
||||
ply_list_append_data (splash->text_displays, display);
|
||||
}
|
||||
|
||||
--
|
||||
2.44.0
|
||||
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
From 4a8c0a4231d35ac060f41b582596684cfba7c9ae Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 7 May 2024 12:42:10 +0200
|
||||
Subject: [PATCH] ply-device-manager: Revert "Fall back to text plugin if no
|
||||
renderers installed"
|
||||
|
||||
The drm renderer may fail to open /dev/dri/card# with -ENOENT when trying
|
||||
to open/probe a simpledrm registered drm device and the open races with
|
||||
that drm device being removed to be replaced by a new drm device registered
|
||||
by the native GPU driver (e.g. i915 / amdgpu).
|
||||
|
||||
Switching to text mode immediately when this race gets hit is undesirable,
|
||||
as it causes text mode on systems where plymouth would run in graphics
|
||||
mode before. Remove the immediate switch to text mode on -ENOENT.
|
||||
Delaying the switch to textmode until the timeout as before.
|
||||
|
||||
This reverts commit 03842d5201e4486fe62635c7b470eb94696f985d.
|
||||
|
||||
Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2270030
|
||||
---
|
||||
src/libply-splash-core/ply-device-manager.c | 8 --------
|
||||
1 file changed, 8 deletions(-)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||
index 59e579dd..d75ac6c5 100644
|
||||
--- a/src/libply-splash-core/ply-device-manager.c
|
||||
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||
@@ -52,7 +52,6 @@
|
||||
static void create_devices_from_udev (ply_device_manager_t *manager);
|
||||
#endif
|
||||
|
||||
-static void create_non_graphical_devices (ply_device_manager_t *manager);
|
||||
static bool create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
|
||||
const char *device_path,
|
||||
ply_terminal_t *terminal,
|
||||
@@ -1102,13 +1101,6 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
|
||||
renderer = ply_renderer_new (renderer_type, device_path, terminal);
|
||||
|
||||
if (renderer != NULL && !ply_renderer_open (renderer)) {
|
||||
- if (errno == ENOENT) {
|
||||
- ply_trace ("No renderer plugins installed, creating non-graphical devices");
|
||||
- ply_renderer_free (renderer);
|
||||
- create_non_graphical_devices (manager);
|
||||
- manager->device_timeout_elapsed = true;
|
||||
- return false;
|
||||
- }
|
||||
ply_trace ("could not open renderer for %s", device_path);
|
||||
ply_renderer_free (renderer);
|
||||
renderer = NULL;
|
||||
--
|
||||
2.44.0
|
||||
|
||||
+526
@@ -0,0 +1,526 @@
|
||||
From 64379c1100a0177f52e130601d44a7ffe0fdedf1 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 4 Jun 2024 21:09:00 +0200
|
||||
Subject: [PATCH 1/9] ply-utils: Add ply_string_has_suffix () helper function
|
||||
|
||||
Add a ply_string_has_suffix () helper function to match the existing
|
||||
ply_string_has_prefix () helper function.
|
||||
---
|
||||
src/libply/ply-utils.c | 18 ++++++++++++++++++
|
||||
src/libply/ply-utils.h | 2 ++
|
||||
2 files changed, 20 insertions(+)
|
||||
|
||||
diff --git a/src/libply/ply-utils.c b/src/libply/ply-utils.c
|
||||
index 0e317b67..d6d127f1 100644
|
||||
--- a/src/libply/ply-utils.c
|
||||
+++ b/src/libply/ply-utils.c
|
||||
@@ -473,6 +473,24 @@ ply_string_has_prefix (const char *str,
|
||||
return strncmp (str, prefix, strlen (prefix)) == 0;
|
||||
}
|
||||
|
||||
+bool
|
||||
+ply_string_has_suffix (const char *str,
|
||||
+ const char *suffix)
|
||||
+{
|
||||
+ size_t str_len, suffix_len;
|
||||
+
|
||||
+ if (str == NULL || suffix == NULL)
|
||||
+ return false;
|
||||
+
|
||||
+ str_len = strlen (str);
|
||||
+ suffix_len = strlen (suffix);
|
||||
+
|
||||
+ if (suffix_len > str_len)
|
||||
+ return false;
|
||||
+
|
||||
+ return strcmp (str + (str_len - suffix_len), suffix) == 0;
|
||||
+}
|
||||
+
|
||||
double
|
||||
ply_get_timestamp (void)
|
||||
{
|
||||
diff --git a/src/libply/ply-utils.h b/src/libply/ply-utils.h
|
||||
index 7cbbb2f4..86d66384 100644
|
||||
--- a/src/libply/ply-utils.h
|
||||
+++ b/src/libply/ply-utils.h
|
||||
@@ -109,6 +109,8 @@ char **ply_copy_string_array (const char *const *array);
|
||||
void ply_free_string_array (char **array);
|
||||
bool ply_string_has_prefix (const char *str,
|
||||
const char *prefix);
|
||||
+bool ply_string_has_suffix (const char *str,
|
||||
+ const char *suffix);
|
||||
double ply_get_timestamp (void);
|
||||
|
||||
void ply_save_errno (void);
|
||||
--
|
||||
2.45.1
|
||||
|
||||
From 1c3ff0338c80a831b2f0ea63a57e20c9013ddb52 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 4 Jun 2024 21:16:31 +0200
|
||||
Subject: [PATCH 2/9] ply-device-manager: Add syspath_is_simpledrm () helper
|
||||
|
||||
Add a helper to determine if a udev syspath is a simpledrm device.
|
||||
This is a preparation patch to for making simpledrm devices their
|
||||
own renderer-type.
|
||||
---
|
||||
src/libply-splash-core/ply-device-manager.c | 11 +++++++----
|
||||
1 file changed, 7 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||
index d75ac6c5..4c48f606 100644
|
||||
--- a/src/libply-splash-core/ply-device-manager.c
|
||||
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||
@@ -339,11 +339,15 @@ remove_input_device_from_renderers (ply_device_manager_t *manager,
|
||||
ply_hashtable_foreach (manager->renderers, (ply_hashtable_foreach_func_t *) on_each_input_device_remove_from_renderer, input_device);
|
||||
}
|
||||
|
||||
+static bool
|
||||
+syspath_is_simpledrm (const char *syspath)
|
||||
+{
|
||||
+ return ply_string_has_suffix (syspath, "simple-framebuffer.0/drm/card0");
|
||||
+}
|
||||
+
|
||||
static bool
|
||||
verify_drm_device (struct udev_device *device)
|
||||
{
|
||||
- const char *id_path;
|
||||
-
|
||||
/*
|
||||
* Simple-framebuffer devices driven by simpledrm lack information
|
||||
* like panel-rotation info and physical size, causing the splash
|
||||
@@ -352,8 +356,7 @@ verify_drm_device (struct udev_device *device)
|
||||
* To avoid this treat simpledrm devices as fbdev devices and only
|
||||
* use them after the timeout.
|
||||
*/
|
||||
- id_path = udev_device_get_property_value (device, "ID_PATH");
|
||||
- if (!ply_string_has_prefix (id_path, "platform-simple-framebuffer"))
|
||||
+ if (!syspath_is_simpledrm (udev_device_get_syspath (device)))
|
||||
return true; /* Not a SimpleDRM device */
|
||||
|
||||
/*
|
||||
--
|
||||
2.45.1
|
||||
|
||||
From 19d49a42fcc3cf9d3ee62a572eec24e8b73f9799 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 4 Jun 2024 21:24:22 +0200
|
||||
Subject: [PATCH 3/9] ply-renderer: Add new PLY_RENDERER_TYPE_SIMPLEDRM
|
||||
renderer-type
|
||||
|
||||
Add a new PLY_RENDERER_TYPE_SIMPLEDRM renderer-type to help differentiate
|
||||
the simpledrm case from the regular drm device case.
|
||||
|
||||
simpledrm devices require some special handling in the device-manager,
|
||||
this is a preparation patch for improving the simpledrm handling
|
||||
in ply-device-manager.
|
||||
---
|
||||
src/libply-splash-core/ply-device-manager.c | 11 ++++++++---
|
||||
src/libply-splash-core/ply-renderer.c | 1 +
|
||||
src/libply-splash-core/ply-renderer.h | 1 +
|
||||
3 files changed, 10 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||
index 4c48f606..256b38d0 100644
|
||||
--- a/src/libply-splash-core/ply-device-manager.c
|
||||
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||
@@ -380,7 +380,7 @@ static bool
|
||||
create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||
struct udev_device *device)
|
||||
{
|
||||
- const char *device_path, *device_sysname;
|
||||
+ const char *device_path, *device_sysname, *device_syspath;
|
||||
bool created = false;
|
||||
bool force_fb = false;
|
||||
|
||||
@@ -389,6 +389,7 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||
|
||||
device_path = udev_device_get_devnode (device);
|
||||
device_sysname = udev_device_get_sysname (device);
|
||||
+ device_syspath = udev_device_get_syspath (device);
|
||||
|
||||
if (device_path != NULL) {
|
||||
const char *subsystem;
|
||||
@@ -403,7 +404,10 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||
return false;
|
||||
}
|
||||
ply_trace ("found DRM device %s", device_path);
|
||||
- renderer_type = PLY_RENDERER_TYPE_DRM;
|
||||
+ if (syspath_is_simpledrm (device_syspath))
|
||||
+ renderer_type = PLY_RENDERER_TYPE_SIMPLEDRM;
|
||||
+ else
|
||||
+ renderer_type = PLY_RENDERER_TYPE_DRM;
|
||||
} else if (strcmp (subsystem, SUBSYSTEM_FRAME_BUFFER) == 0) {
|
||||
ply_trace ("found frame buffer device %s", device_path);
|
||||
if (!fb_device_has_drm_device (manager, device))
|
||||
@@ -446,7 +450,8 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||
terminal,
|
||||
renderer_type);
|
||||
if (created) {
|
||||
- if (renderer_type == PLY_RENDERER_TYPE_DRM)
|
||||
+ if (renderer_type == PLY_RENDERER_TYPE_DRM ||
|
||||
+ renderer_type == PLY_RENDERER_TYPE_SIMPLEDRM)
|
||||
manager->found_drm_device = 1;
|
||||
if (renderer_type == PLY_RENDERER_TYPE_FRAME_BUFFER)
|
||||
manager->found_fb_device = 1;
|
||||
diff --git a/src/libply-splash-core/ply-renderer.c b/src/libply-splash-core/ply-renderer.c
|
||||
index 40a2c813..6a7aff96 100644
|
||||
--- a/src/libply-splash-core/ply-renderer.c
|
||||
+++ b/src/libply-splash-core/ply-renderer.c
|
||||
@@ -269,6 +269,7 @@ ply_renderer_open (ply_renderer_t *renderer)
|
||||
{
|
||||
{ PLY_RENDERER_TYPE_X11, PLYMOUTH_PLUGIN_PATH "renderers/x11.so" },
|
||||
{ PLY_RENDERER_TYPE_DRM, PLYMOUTH_PLUGIN_PATH "renderers/drm.so" },
|
||||
+ { PLY_RENDERER_TYPE_SIMPLEDRM, PLYMOUTH_PLUGIN_PATH "renderers/drm.so" },
|
||||
{ PLY_RENDERER_TYPE_FRAME_BUFFER, PLYMOUTH_PLUGIN_PATH "renderers/frame-buffer.so" },
|
||||
{ PLY_RENDERER_TYPE_NONE, NULL }
|
||||
};
|
||||
diff --git a/src/libply-splash-core/ply-renderer.h b/src/libply-splash-core/ply-renderer.h
|
||||
index 5fbf819d..34ff5886 100644
|
||||
--- a/src/libply-splash-core/ply-renderer.h
|
||||
+++ b/src/libply-splash-core/ply-renderer.h
|
||||
@@ -41,6 +41,7 @@ typedef enum
|
||||
PLY_RENDERER_TYPE_NONE = -1,
|
||||
PLY_RENDERER_TYPE_AUTO,
|
||||
PLY_RENDERER_TYPE_DRM,
|
||||
+ PLY_RENDERER_TYPE_SIMPLEDRM,
|
||||
PLY_RENDERER_TYPE_FRAME_BUFFER,
|
||||
PLY_RENDERER_TYPE_X11
|
||||
} ply_renderer_type_t;
|
||||
--
|
||||
2.45.1
|
||||
|
||||
From 188a4393b11fdb25f1fcc7e1ca763d62374b3d70 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 4 Jun 2024 22:05:20 +0200
|
||||
Subject: [PATCH 4/9] ply-renderer: Add ply_renderer_get_type ()
|
||||
|
||||
Add a ply_renderer_get_type () helper function to get the type of
|
||||
a renderer.
|
||||
---
|
||||
src/libply-splash-core/ply-renderer.c | 6 ++++++
|
||||
src/libply-splash-core/ply-renderer.h | 1 +
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-renderer.c b/src/libply-splash-core/ply-renderer.c
|
||||
index 6a7aff96..61c59ccc 100644
|
||||
--- a/src/libply-splash-core/ply-renderer.c
|
||||
+++ b/src/libply-splash-core/ply-renderer.c
|
||||
@@ -102,6 +102,12 @@ ply_renderer_get_device_name (ply_renderer_t *renderer)
|
||||
return renderer->device_name;
|
||||
}
|
||||
|
||||
+ply_renderer_type_t
|
||||
+ply_renderer_get_type (ply_renderer_t *renderer)
|
||||
+{
|
||||
+ return renderer->type;
|
||||
+}
|
||||
+
|
||||
static bool
|
||||
ply_renderer_load_plugin (ply_renderer_t *renderer,
|
||||
const char *module_path)
|
||||
diff --git a/src/libply-splash-core/ply-renderer.h b/src/libply-splash-core/ply-renderer.h
|
||||
index 34ff5886..cfd4f2dd 100644
|
||||
--- a/src/libply-splash-core/ply-renderer.h
|
||||
+++ b/src/libply-splash-core/ply-renderer.h
|
||||
@@ -63,6 +63,7 @@ void ply_renderer_activate (ply_renderer_t *renderer);
|
||||
void ply_renderer_deactivate (ply_renderer_t *renderer);
|
||||
bool ply_renderer_is_active (ply_renderer_t *renderer);
|
||||
const char *ply_renderer_get_device_name (ply_renderer_t *renderer);
|
||||
+ply_renderer_type_t ply_renderer_get_type (ply_renderer_t *renderer);
|
||||
ply_list_t *ply_renderer_get_heads (ply_renderer_t *renderer);
|
||||
ply_pixel_buffer_t *ply_renderer_get_buffer_for_head (ply_renderer_t *renderer,
|
||||
ply_renderer_head_t *head);
|
||||
--
|
||||
2.45.1
|
||||
|
||||
From 9096b304f6bec090ed53aa280f234c2b4fd18828 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Wed, 5 Jun 2024 21:31:55 +0200
|
||||
Subject: [PATCH 5/9] ply-device-manager: Skip /dev/dri/render nodes
|
||||
|
||||
DRM render nodes do not support KMS and trying to probe them just
|
||||
slows things down, so skip them.
|
||||
---
|
||||
src/libply-splash-core/ply-device-manager.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||
index 256b38d0..51990b7c 100644
|
||||
--- a/src/libply-splash-core/ply-device-manager.c
|
||||
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||
@@ -403,6 +403,10 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||
ply_trace ("ignoring since we only handle SimpleDRM devices after timeout");
|
||||
return false;
|
||||
}
|
||||
+ if (ply_string_has_prefix (device_path, "/dev/dri/render")) {
|
||||
+ ply_trace ("ignoring since it is a render node");
|
||||
+ return false;
|
||||
+ }
|
||||
ply_trace ("found DRM device %s", device_path);
|
||||
if (syspath_is_simpledrm (device_syspath))
|
||||
renderer_type = PLY_RENDERER_TYPE_SIMPLEDRM;
|
||||
--
|
||||
2.45.1
|
||||
|
||||
From eb5abda0c2fbcd88892f2fbd346a1ac2413cc8ad Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Wed, 5 Jun 2024 21:38:43 +0200
|
||||
Subject: [PATCH 6/9] ply-device-manager: Move local_console_terminal handling
|
||||
for DRM/FB renderers
|
||||
|
||||
create_devices_for_terminal_and_renderer_type () only ever gets called with
|
||||
a NULL terminal parameter when create_devices_for_udev_device () is calling
|
||||
it to create a DRM or FB renderer.
|
||||
|
||||
Move the use of local_console_terminal as terminal for the first DRM / FB
|
||||
renderer created from create_devices_for_udev_device () to
|
||||
create_devices_for_terminal_and_renderer_type () with an extra !terminal
|
||||
check.
|
||||
|
||||
This is a preparation patch for fixing an issue where the local_console
|
||||
is managed by a simpledrm renderer and the remove event for that gets
|
||||
processed after the add event of the normal drm device which leaves
|
||||
the local_console unmanaged breaking legacy input support.
|
||||
---
|
||||
src/libply-splash-core/ply-device-manager.c | 15 ++++++---------
|
||||
1 file changed, 6 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||
index 51990b7c..65504e93 100644
|
||||
--- a/src/libply-splash-core/ply-device-manager.c
|
||||
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||
@@ -441,17 +441,9 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||
}
|
||||
|
||||
if (renderer_type != PLY_RENDERER_TYPE_NONE) {
|
||||
- ply_terminal_t *terminal = NULL;
|
||||
-
|
||||
- if (!manager->local_console_managed &&
|
||||
- manager->local_console_terminal != NULL &&
|
||||
- ply_terminal_is_vt (manager->local_console_terminal)) {
|
||||
- terminal = manager->local_console_terminal;
|
||||
- }
|
||||
-
|
||||
created = create_devices_for_terminal_and_renderer_type (manager,
|
||||
device_path,
|
||||
- terminal,
|
||||
+ NULL,
|
||||
renderer_type);
|
||||
if (created) {
|
||||
if (renderer_type == PLY_RENDERER_TYPE_DRM ||
|
||||
@@ -1105,6 +1097,11 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
|
||||
return true;
|
||||
}
|
||||
|
||||
+ if (!terminal && !manager->local_console_managed &&
|
||||
+ manager->local_console_terminal != NULL &&
|
||||
+ ply_terminal_is_vt (manager->local_console_terminal))
|
||||
+ terminal = manager->local_console_terminal;
|
||||
+
|
||||
ply_trace ("creating devices for %s (renderer type: %u) (terminal: %s)",
|
||||
device_path ? : "", renderer_type, terminal ? ply_terminal_get_name (terminal) : "none");
|
||||
|
||||
--
|
||||
2.45.1
|
||||
|
||||
From 8c0d5965030aae11249cbe1e42decc0654005c39 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Wed, 5 Jun 2024 21:52:19 +0200
|
||||
Subject: [PATCH 7/9] ply-device-manager: Remove simpledrm renderers before
|
||||
adding normal drm renderers
|
||||
|
||||
udev remove events for simpledrm udev devices may arrive after the udev add
|
||||
event for a normal drm udev device which is replacing the simpledrm device.
|
||||
|
||||
When the local_console is managed by a simpledrm renderer and the remove
|
||||
event for the simpledrm renderer is received after the add event of
|
||||
the normal drm device, the local_console is left unmanaged breaking legacy
|
||||
input support.
|
||||
|
||||
When this scenario gets hit it breaks entering disk unlock passwords.
|
||||
|
||||
Add code to remove simpledrm renderers before adding normal drm renderers
|
||||
to avoid this.
|
||||
---
|
||||
src/libply-splash-core/ply-device-manager.c | 24 +++++++++++++++++++++
|
||||
1 file changed, 24 insertions(+)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||
index 65504e93..1c9560d7 100644
|
||||
--- a/src/libply-splash-core/ply-device-manager.c
|
||||
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||
@@ -1080,6 +1080,18 @@ create_text_displays_for_terminal (ply_device_manager_t *manager,
|
||||
manager->text_display_added_handler (manager->event_handler_data, display);
|
||||
}
|
||||
|
||||
+static void
|
||||
+free_simpledrm_renderer (char *device_path,
|
||||
+ ply_renderer_t *renderer,
|
||||
+ ply_device_manager_t *manager)
|
||||
+{
|
||||
+ if (ply_renderer_get_type (renderer) != PLY_RENDERER_TYPE_SIMPLEDRM)
|
||||
+ return;
|
||||
+
|
||||
+ ply_trace ("removing simpledrm renderer %s", device_path);
|
||||
+ free_devices_from_device_path (manager, device_path, true);
|
||||
+}
|
||||
+
|
||||
static bool
|
||||
create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
|
||||
const char *device_path,
|
||||
@@ -1097,6 +1109,18 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
|
||||
return true;
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * simpledrm udev remove events may arrive after normal drm device add
|
||||
+ * events, leaving the local_console unmanaged breaking legacy input.
|
||||
+ * Remove simpledrm renderers before adding drm renderers to avoid this.
|
||||
+ */
|
||||
+ if (renderer_type == PLY_RENDERER_TYPE_DRM) {
|
||||
+ ply_hashtable_foreach (manager->renderers,
|
||||
+ (ply_hashtable_foreach_func_t *)
|
||||
+ free_simpledrm_renderer,
|
||||
+ manager);
|
||||
+ }
|
||||
+
|
||||
if (!terminal && !manager->local_console_managed &&
|
||||
manager->local_console_terminal != NULL &&
|
||||
ply_terminal_is_vt (manager->local_console_terminal))
|
||||
--
|
||||
2.45.1
|
||||
|
||||
From 2f8b64ea4c6cefca6569ab94dc37d436a3fbf048 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Tue, 4 Jun 2024 23:07:19 +0200
|
||||
Subject: [PATCH 8/9] ply-device-manager: Create renderer for simpledrm devices
|
||||
right away
|
||||
|
||||
Often when plymouth starts and enumerates udev devices which are already
|
||||
present at start (coldplug detection), udev is still initializing all
|
||||
the devices and it reports 0 for udev_device_get_is_initialized ().
|
||||
|
||||
It may take a long time for the state of the simpledrm udev device
|
||||
to change to initialized and for a udev add event to be send.
|
||||
|
||||
Especially when the amdgpu kernel module is involved which is very
|
||||
large for a kernel module and can take op to 7 seconds to load.
|
||||
|
||||
In this case it is even possible for plymouth's default DeviceTimeout
|
||||
of 8 seconds to trigger before the simpledrm device is considered
|
||||
initialized. See for example these lines extracted from the plymouth-debug
|
||||
log attached to: https://bugzilla.redhat.com/show_bug.cgi?id=2183743
|
||||
|
||||
00:00:02.909 ../src/libply-splash-core/ply-device-manager.c:498:create_devi: found device /sys/devices/pci0000:00/0000:00:01.0/simple-framebuffer.0/drm/card0
|
||||
00:00:02.910 ../src/libply-splash-core/ply-device-manager.c:513:create_devi: it's not initialized
|
||||
00:00:10.917 ../src/libply-splash-core/ply-device-manager.c:1237:create_dev: Timeout elapsed, looking for devices from udev
|
||||
00:00:10.918 ../src/libply-splash-core/ply-device-manager.c:498:create_devi: found device /sys/devices/pci0000:00/0000:00:01.0/simple-framebuffer.0/drm/card0
|
||||
00:00:10.918 ../src/libply-splash-core/ply-device-manager.c:513:create_devi: it's not initialized
|
||||
|
||||
This leads to plymouth falling back to the text splash even when
|
||||
plymouth.use-simpledrm is passed on the kernel commandline.
|
||||
|
||||
Add a special case for simpledrm devices and add these during coldboot
|
||||
even if they are not initialized yet.
|
||||
---
|
||||
src/libply-splash-core/ply-device-manager.c | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||
index 1c9560d7..90a60661 100644
|
||||
--- a/src/libply-splash-core/ply-device-manager.c
|
||||
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||
@@ -490,6 +490,7 @@ create_devices_for_subsystem (ply_device_manager_t *manager,
|
||||
udev_list_entry_foreach (entry, udev_enumerate_get_list_entry (matches)){
|
||||
struct udev_device *device = NULL;
|
||||
const char *path, *node;
|
||||
+ int initialized;
|
||||
|
||||
path = udev_list_entry_get_name (entry);
|
||||
|
||||
@@ -502,10 +503,11 @@ create_devices_for_subsystem (ply_device_manager_t *manager,
|
||||
|
||||
device = udev_device_new_from_syspath (manager->udev_context, path);
|
||||
|
||||
- /* if device isn't fully initialized, we'll get an add event later
|
||||
- */
|
||||
- if (udev_device_get_is_initialized (device)) {
|
||||
- ply_trace ("device is initialized");
|
||||
+ /* If device isn't fully initialized, we'll get an add event later */
|
||||
+ initialized = udev_device_get_is_initialized (device);
|
||||
+ /* Simpledrm can be handled uninitialized and this shows the splash sooner */
|
||||
+ if (initialized || syspath_is_simpledrm (path)) {
|
||||
+ ply_trace ("device is initialized %d", initialized);
|
||||
|
||||
node = udev_device_get_devnode (device);
|
||||
if (node != NULL) {
|
||||
--
|
||||
2.45.1
|
||||
|
||||
From 12fdedb4efb0b7e04c74f43917a180a20e54ea24 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Wed, 5 Jun 2024 22:07:32 +0200
|
||||
Subject: [PATCH 9/9] ply-device-manager: Make create_devices_for_subsystem ()
|
||||
return void
|
||||
|
||||
Make create_devices_for_subsystem () return void. Its callers do not care
|
||||
about the return value and currently the return value is not always correct
|
||||
since if a device is found, found may later become false again if
|
||||
a subsequent create_devices_for_udev_device () call fails.
|
||||
---
|
||||
src/libply-splash-core/ply-device-manager.c | 11 ++++-------
|
||||
1 file changed, 4 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||
index 90a60661..1f41e1b2 100644
|
||||
--- a/src/libply-splash-core/ply-device-manager.c
|
||||
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||
@@ -458,23 +458,22 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||
return created;
|
||||
}
|
||||
|
||||
-static bool
|
||||
+static void
|
||||
create_devices_for_subsystem (ply_device_manager_t *manager,
|
||||
const char *subsystem)
|
||||
{
|
||||
struct udev_enumerate *matches;
|
||||
struct udev_list_entry *entry;
|
||||
- bool found_device = false;
|
||||
|
||||
if (strcmp (subsystem, SUBSYSTEM_INPUT) == 0) {
|
||||
if (ply_kernel_command_line_has_argument ("plymouth.use-legacy-input")) {
|
||||
ply_trace ("Not creating devices for subsystem " SUBSYSTEM_INPUT " because plymouth.use-legacy-input on command line");
|
||||
- return false;
|
||||
+ return;
|
||||
}
|
||||
|
||||
if (manager->xkb_keymap == NULL) {
|
||||
ply_trace ("Not creating devices for subsystem " SUBSYSTEM_INPUT " because there is no configure XKB layout");
|
||||
- return false;
|
||||
+ return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -512,7 +511,7 @@ create_devices_for_subsystem (ply_device_manager_t *manager,
|
||||
node = udev_device_get_devnode (device);
|
||||
if (node != NULL) {
|
||||
ply_trace ("found node %s", node);
|
||||
- found_device = create_devices_for_udev_device (manager, device);
|
||||
+ create_devices_for_udev_device (manager, device);
|
||||
}
|
||||
} else {
|
||||
ply_trace ("it's not initialized");
|
||||
@@ -522,8 +521,6 @@ create_devices_for_subsystem (ply_device_manager_t *manager,
|
||||
}
|
||||
|
||||
udev_enumerate_unref (matches);
|
||||
-
|
||||
- return found_device;
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
2.45.1
|
||||
|
||||
@@ -52,6 +52,10 @@
|
||||
<!-- <Patch level="1">mageia/1001-device_manager-ignore-drm-devices-when-kernel-modese.patch</Patch> -->
|
||||
<Patch level="1">mageia/1002-main-allow-the-device-timeout-to-be-overridden-on-th.patch</Patch>
|
||||
<Patch level="1">pisilinux/pisilinux-meson.patch</Patch>
|
||||
<Patch level="1">fedora/0001-Revert-src-Hide-console-text-when-splash-is-requeste.patch</Patch>
|
||||
<Patch level="1">fedora/0001-ply-boot-splash-Set-unbuffered-input-when-creating-a.patch</Patch>
|
||||
<Patch level="1">fedora/0001-ply-device-manager-Revert-Fall-back-to-text-plugin-i.patch</Patch>
|
||||
<Patch level="1">fedora/plymouth-24.004.60-immediately-probe-simpledrm.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
@@ -352,6 +356,13 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="14">
|
||||
<Date>2024-07-07</Date>
|
||||
<Version>24.004.60</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="13">
|
||||
<Date>2024-07-07</Date>
|
||||
<Version>24.004.60</Version>
|
||||
|
||||
Reference in New Issue
Block a user