123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527 |
- 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
|