Probe simpledrm immediately (rhbz#2183743, rhbz#2274770)
Probe simpledrm immediately instead of waiting for udev_device_get_is_initialized () to return true. This fixes users getting the text splash on laptops with somewhat slower CPUs combined with loading the amdgpu module which may take 7+ seconds.
This commit is contained in:
parent
09ac30843c
commit
62deff5e58
556
plymouth-24.004.60-immediately-probe-simpledrm.patch
Normal file
556
plymouth-24.004.60-immediately-probe-simpledrm.patch
Normal file
@ -0,0 +1,556 @@
|
||||
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
|
||||
|
||||
From f8043095b8a2eb69b18947d925b30cee95e4c1fe Mon Sep 17 00:00:00 2001
|
||||
From: Adrian Vovk <adrianvovk@gmail.com>
|
||||
Date: Tue, 29 Apr 2025 14:44:48 -0400
|
||||
Subject: [PATCH] Fix ABI incompatibility
|
||||
|
||||
A previous commit in this patch series accidentally introduced an ABI
|
||||
incompatiblity: PLY_RENRERER_TYPE_{FRAME_BUFFER,X11} changed their values.
|
||||
Let's undo that.
|
||||
---
|
||||
src/libply-splash-core/ply-renderer.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/libply-splash-core/ply-renderer.h b/src/libply-splash-core/ply-renderer.h
|
||||
index cfd4f2dd..b667ff6d 100644
|
||||
--- a/src/libply-splash-core/ply-renderer.h
|
||||
+++ b/src/libply-splash-core/ply-renderer.h
|
||||
@@ -41,9 +41,9 @@ 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_X11,
|
||||
+ PLY_RENDERER_TYPE_SIMPLEDRM
|
||||
} ply_renderer_type_t;
|
||||
|
||||
typedef void (*ply_renderer_input_source_handler_t) (void *user_data,
|
||||
--
|
||||
2.47.1
|
||||
@ -24,6 +24,14 @@ Patch: 0001-ply-boot-splash-Set-unbuffered-input-when-creating-a.patch
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2270030
|
||||
Patch: 0001-ply-device-manager-Revert-Fall-back-to-text-plugin-i.patch
|
||||
|
||||
# Probe simpledrm immediately instead of waiting for udev_device_get_is_initialized ()
|
||||
# to return true. This fixes users getting the text splash on laptops with somewhat
|
||||
# slower CPUs combined with loading the amdgpu module which may take 7+ seconds
|
||||
# https://gitlab.freedesktop.org/plymouth/plymouth/-/merge_requests/323/
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2183743
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2274770
|
||||
Patch: plymouth-24.004.60-immediately-probe-simpledrm.patch
|
||||
|
||||
BuildRequires: meson
|
||||
BuildRequires: system-logos
|
||||
BuildRequires: gcc libtool git
|
||||
|
||||
Loading…
Reference in New Issue
Block a user