Mesa (staging/20.2): vulkan/wsi: fix possible random stalls in wsi_display_wait_for_event
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Oct 20 17:02:29 UTC 2020
Module: Mesa
Branch: staging/20.2
Commit: 0bc9a81733e975aaacab65a67f7eec3dd4f639c2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0bc9a81733e975aaacab65a67f7eec3dd4f639c2
Author: Marcin Ślusarz <marcin.slusarz at intel.com>
Date: Fri Oct 16 20:07:28 2020 +0200
vulkan/wsi: fix possible random stalls in wsi_display_wait_for_event
pthread_cond_broadcast man page says this:
"The pthread_cond_broadcast() or pthread_cond_signal() functions may
be called by a thread whether or not it currently owns the mutex that
threads calling pthread_cond_wait() or pthread_cond_timedwait() have
associated with the condition variable during their waits; however,
if predictable scheduling behavior is required, then that mutex shall
be locked by the thread calling pthread_cond_broadcast() or
pthread_cond_signal()."
Found by reading the code.
Compile tested only.
Fixes: da997ebec92 ("vulkan: Add KHR_display extension using DRM [v10]")
Signed-off-by: Marcin Ślusarz <marcin.slusarz at intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7197>
(cherry picked from commit 440813114281bfd05c2b0d26c6488d1410790be4)
---
.pick_status.json | 2 +-
src/vulkan/wsi/wsi_common_display.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.pick_status.json b/.pick_status.json
index d15e4552bf5..171ae40b136 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -166,7 +166,7 @@
"description": "vulkan/wsi: fix possible random stalls in wsi_display_wait_for_event",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "da997ebec92942193955386535813374286b7fb1"
},
diff --git a/src/vulkan/wsi/wsi_common_display.c b/src/vulkan/wsi/wsi_common_display.c
index b05d7cc479d..e77211cf0a1 100644
--- a/src/vulkan/wsi/wsi_common_display.c
+++ b/src/vulkan/wsi/wsi_common_display.c
@@ -1209,8 +1209,8 @@ wsi_display_wait_thread(void *data)
if (ret > 0) {
pthread_mutex_lock(&wsi->wait_mutex);
(void) drmHandleEvent(wsi->fd, &event_context);
- pthread_mutex_unlock(&wsi->wait_mutex);
pthread_cond_broadcast(&wsi->wait_cond);
+ pthread_mutex_unlock(&wsi->wait_mutex);
}
}
return NULL;
More information about the mesa-commit
mailing list