From c6354f54f9c9099f5ede823b43ce805ffcd69efa Mon Sep 17 00:00:00 2001 From: Molyuu <1055126159@qq.com> Date: Sun, 14 Dec 2025 00:40:59 +0800 Subject: [PATCH] drm: convert vd path before compare with explicit device path (#222) FreeBSD always returning symbolic links '/dev/dri/card*' pointed to '/dev/drm/*', so output device will never be found if `AQ_DRM_DEVICES` is set as explicit devices path is converted to canonical file path. --- src/backend/drm/DRM.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/backend/drm/DRM.cpp b/src/backend/drm/DRM.cpp index 35a923d..a639182 100644 --- a/src/backend/drm/DRM.cpp +++ b/src/backend/drm/DRM.cpp @@ -200,7 +200,14 @@ static std::vector> scanGPUs(SP backend) { for (auto const& d : explicitDevices) { bool found = false; for (auto const& vd : devices) { - if (vd->path == d) { + std::error_code ec; + auto canonicalFilePath = std::filesystem::canonical(vd->path, ec); + if (ec) { + backend->log(AQ_LOG_ERROR, std::format("drm: Failed to canonicalize path {}", d)); + canonicalFilePath = vd->path; + } + + if (canonicalFilePath == d) { vecDevices.emplace_back(vd); found = true; break;