diff options
author | Michel Dänzer <[email protected]> | 2020-02-18 19:04:00 +0100 |
---|---|---|
committer | Michel Dänzer <[email protected]> | 2020-02-21 17:10:48 +0100 |
commit | f5a8958910f53d924d062cbf024cebe4134f757a (patch) | |
tree | 3f7234ce1e9d46766768fc0b912dce2b895c97a8 /src/gallium/winsys | |
parent | 228cbdfe67e465dc79558fc76a51d8115251b5e5 (diff) |
util: Change os_same_file_description return type from bool to int
This allows communicating that it wasn't possible to determine whether
the two file descriptors reference the same file description. When
that's the case, log a warning in the amdgpu winsys.
In turn, remove the corresponding debugging output from the fallback
os_same_file_description implementation. It depends on the caller if
false negatives are problematic or not.
Reviewed-by: Eric Engestrom <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3879>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3879>
Diffstat (limited to 'src/gallium/winsys')
-rw-r--r-- | src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c index 1db7cf6b291..fdabb8b6228 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c @@ -31,6 +31,7 @@ #include "amdgpu_public.h" #include "util/os_file.h" +#include "util/os_misc.h" #include "util/u_cpu_detect.h" #include "util/u_hash_table.h" #include "util/hash_table.h" @@ -381,13 +382,25 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config, simple_mtx_lock(&aws->sws_list_lock); for (sws_iter = aws->sws_list; sws_iter; sws_iter = sws_iter->next) { - if (os_same_file_description(sws_iter->fd, ws->fd)) { + r = os_same_file_description(sws_iter->fd, ws->fd); + + if (r == 0) { close(ws->fd); FREE(ws); ws = sws_iter; pipe_reference(NULL, &ws->reference); simple_mtx_unlock(&aws->sws_list_lock); goto unlock; + } else if (r < 0) { + static bool logged; + + if (!logged) { + os_log_message("amdgpu: os_same_file_description couldn't " + "determine if two DRM fds reference the same " + "file description.\n" + "If they do, bad things may happen!\n"); + logged = true; + } } } simple_mtx_unlock(&aws->sws_list_lock); |