From 5acb3ceee3b815bcd338ee75492739dfd57475c5 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 28 Feb 2022 16:36:58 +0100 Subject: [PATCH 1/2] ply-device-manager: verify_add_or_change(): Move local_console_is_text check Move the local_console_is_text check outside of the "if (subsytem == SUBSYSTEM_DRM)" block. This check is equally relevant for SUBSYSTEM_FRAME_BUFFER. Note by itself this is a no-op since verify_add_or_change() *always* returns false for SUBSYSTEM_FRAME_BUFFER devices. This is a preparation patch for making verify_add_or_change() not return false when manager->device_timeout_elapsed is set. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-device-manager.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index 82b89f35..7043c7a8 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -450,14 +450,14 @@ verify_add_or_change (ply_device_manager_t *manager, if (strcmp (action, "add") && strcmp (action, "change")) return false; + if (manager->local_console_managed && manager->local_console_is_text) { + ply_trace ("ignoring since we're already using text splash for local console"); + return false; + } + subsystem = udev_device_get_subsystem (device); if (strcmp (subsystem, SUBSYSTEM_DRM) == 0) { - if (manager->local_console_managed && manager->local_console_is_text) { - ply_trace ("ignoring since we're already using text splash for local console"); - return false; - } - if (!verify_drm_device (device)) { ply_trace ("ignoring since we only handle SimpleDRM devices after timeout"); return false; From 9a48b3b5328f094cfbfb110cb3b30df6c78ba061 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 28 Feb 2022 16:46:34 +0100 Subject: [PATCH 2/2] ply-device-manager: Accept new simpledrm/fbdev devices from udev events after timeout Before the device-timeout elapses verify_add_or_change () blocks new simpledrm and fbdev getting added through udev add events because we really only want native drm devices. Then when the timeout triggers the list of udev devices existing at that point int time is rescanned and any drm (including simpledrm) and fbdev devices are added (filtering out duplicates). But what if a simpledrm or fbdev device for some reason only shows up after the timeout? Before this change those would then be ignored for ever. Add a manager->device_timeout_elapsed check and make verify_add_or_change () accept any drm + fbdev devices after the timeout. Note this addresses a mostly theoretically issue since in practice a simpledrm or fbdev device showing up later is very unlikely. Signed-off-by: Hans de Goede --- src/libply-splash-core/ply-device-manager.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index 7043c7a8..215f5bef 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -455,6 +455,9 @@ verify_add_or_change (ply_device_manager_t *manager, return false; } + if (manager->device_timeout_elapsed) + return true; + subsystem = udev_device_get_subsystem (device); if (strcmp (subsystem, SUBSYSTEM_DRM) == 0) {