From 0dfe7631a74500e1d38ffee7a422e8223f7536f6 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Thu, 10 Jul 2025 13:57:48 -0400 Subject: [PATCH] loader: Report DRI_PRIME errors earlier This needs devices[] in order to print an appropriate message but we free it right after the loop. Instead, print the error right away and make the error case after the free just handle jumping to err. Fixes: ea84b85887a1 ("loader: add DRI_PRIME_DEBUG env var") Reviewed-by: Adam Jackson Reviewed-By: Mike Blumenkrantz Part-of: (cherry picked from commit 9e1a1633c439474c4886421ee021b93510df9ec0) --- .pick_status.json | 2 +- src/loader/loader.c | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index d82c468f992..61013006214 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1574,7 +1574,7 @@ "description": "loader: Report DRI_PRIME errors earlier", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "ea84b85887a147b38a2a168e37c3d1f19c94b1b3", "notes": null diff --git a/src/loader/loader.c b/src/loader/loader.c index 98bd9121220..947eb0b6772 100644 --- a/src/loader/loader.c +++ b/src/loader/loader.c @@ -583,21 +583,18 @@ bool loader_get_user_preferred_fd(int *fd_render_gpu, int *original_fd) log_(debug ? _LOADER_WARNING : _LOADER_INFO, "selected (%s)\n", devices[i]->nodes[DRM_NODE_RENDER]); fd = loader_open_device(devices[i]->nodes[DRM_NODE_RENDER]); + if (fd < 0) { + log_(debug ? _LOADER_WARNING : _LOADER_INFO, + "DRI_PRIME: failed to open '%s'\n", + devices[i]->nodes[DRM_NODE_RENDER]); + } break; } drmFreeDevices(devices, num_devices); - if (i == num_devices) + if (i == num_devices || fd < 0) goto err; - if (fd < 0) { - log_(debug ? _LOADER_WARNING : _LOADER_INFO, - "DRI_PRIME: failed to open '%s'\n", - devices[i]->nodes[DRM_NODE_RENDER]); - - goto err; - } - bool is_render_and_display_gpu_diff = !!strcmp(default_tag, prime.str); if (original_fd) { if (is_render_and_display_gpu_diff) {