From 1d837432599eefe2d2557656eec84decc86b03d3 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Thu, 11 Jul 2024 09:51:56 +0800 Subject: [PATCH] GPU (Linux): detect more GPU driver versions --- src/detection/gpu/gpu_linux.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/detection/gpu/gpu_linux.c b/src/detection/gpu/gpu_linux.c index d3e09aebe..33759a8ca 100644 --- a/src/detection/gpu/gpu_linux.c +++ b/src/detection/gpu/gpu_linux.c @@ -32,29 +32,42 @@ static bool pciDetectDriver(FFGPUResult* gpu, FFstrbuf* pciDir, FFstrbuf* buffer, FF_MAYBE_UNUSED const char* drmKey) { + uint32_t pciDirLength = pciDir->length; ffStrbufAppendS(pciDir, "/driver"); char pathBuf[PATH_MAX]; ssize_t resultLength = readlink(pciDir->chars, pathBuf, sizeof(pathBuf)); - if(resultLength > 0) - { - const char* slash = memrchr(pathBuf, '/', (size_t) resultLength); - if (slash) - { - slash++; - ffStrbufSetNS(&gpu->driver, (uint32_t) (resultLength - (slash - pathBuf)), slash); - } + if(resultLength <= 0) return false; + const char* slash = memrchr(pathBuf, '/', (size_t) resultLength); + if (slash) + { + slash++; + ffStrbufSetNS(&gpu->driver, (uint32_t) (resultLength - (slash - pathBuf)), slash); + } + + if (instance.config.general.detectVersion) + { ffStrbufAppendS(pciDir, "/module/version"); if (ffReadFileBuffer(pciDir->chars, buffer)) { ffStrbufTrimRightSpace(buffer); ffStrbufAppendC(&gpu->driver, ' '); ffStrbufAppend(&gpu->driver, buffer); - return true; + } + else if (ffStrbufEqualS(&gpu->driver, "zx")) + { + ffStrbufSubstrBefore(pciDir, pciDirLength); + ffStrbufAppendS(pciDir, "/zx_info/driver_version"); + if (ffReadFileBuffer(pciDir->chars, buffer)) + { + ffStrbufTrimRightSpace(buffer); + ffStrbufAppendC(&gpu->driver, ' '); + ffStrbufAppend(&gpu->driver, buffer); + } } } - return false; + return true; } static void pciDetectAmdSpecific(const FFGPUOptions* options, FFGPUResult* gpu, FFstrbuf* pciDir, FFstrbuf* buffer)