plymouth rebuild

This commit is contained in:
Rmys
2024-07-16 16:33:09 +03:00
parent b004e7fae2
commit a70e95fcfb
5 changed files with 684 additions and 0 deletions
@@ -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
@@ -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
@@ -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
@@ -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
+11
View File
@@ -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>