summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Schmitt <maxime.schmitt91@gmail.com>2022-08-23 20:25:57 +0200
committerMaxime Schmitt <maxime.schmitt91@gmail.com>2022-08-23 20:25:57 +0200
commit7c7059aeb02e0a394a0ff16669729c3ecf3f1c07 (patch)
treee3fdf1cd8c6f6046f0087db49108ee626afab89d
parent8afaee4fd96849d6c98ce02d8f06d2e7b8cb7028 (diff)
parentcf613fb2f6c3a2026ab10a057fd48a3f685086a7 (diff)
Merge branch 'fix_amdgpu_device_handle_segfault'
-rw-r--r--src/extract_gpuinfo_amdgpu.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/extract_gpuinfo_amdgpu.c b/src/extract_gpuinfo_amdgpu.c
index b6ea8ca..5c92dde 100644
--- a/src/extract_gpuinfo_amdgpu.c
+++ b/src/extract_gpuinfo_amdgpu.c
@@ -357,14 +357,15 @@ static bool gpuinfo_amdgpu_get_device_handles(
int fd = -1;
- for (unsigned int j = DRM_NODE_MAX - 1;; j--) {
- if (!(1 << j & devs[i]->available_nodes))
- continue;
-
- if ((fd = open(devs[i]->nodes[j], O_RDWR)) < 0)
- continue;
-
- break;
+ // Try render node first
+ if (1 << DRM_NODE_RENDER & devs[i]->available_nodes) {
+ fd = open(devs[i]->nodes[DRM_NODE_RENDER], O_RDWR);
+ }
+ if (fd < 0) {
+ // Fallback to primary node (control nodes are unused according to the DRM documentation)
+ if (1 << DRM_NODE_PRIMARY & devs[i]->available_nodes) {
+ fd = open(devs[i]->nodes[DRM_NODE_PRIMARY], O_RDWR);
+ }
}
if (fd < 0)