summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJim Qu <Jim.Qu@amd.com>2018-07-10 18:36:42 +0200
committerMichel Dänzer <michel@daenzer.net>2018-07-11 18:34:53 +0200
commitcc1d0824a8a7ef29f8911b95695f7cb1b4abe9b8 (patch)
treeb8e97c395969517d09a981e16657f270656651c9 /src
parent413622bcccc9d36a9c87679f379dc84b21a3c655 (diff)
Wait for pending scanout update before calling drmmode_crtc_scanout_free
There is a case that when set screen from reverse to normal, the old scanout damage is freed in modesetting before scanout update handler, so it causes segment fault issue. Signed-off-by: Jim Qu <Jim.Qu@amd.com> [ Michel Dänzer: Only call drmmode_crtc_wait_pending_event before drmmode_crtc_scanout_free is actually called, slightly tweak commit message ] Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> (Ported from amdgpu commit 9f6a8905611b5b1d8fcd31bebbc9af7ca1355cc3) Acked-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'src')
-rw-r--r--src/drmmode_display.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 2773ce67..b3e5cc99 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -985,9 +985,11 @@ done:
if (drmmode_crtc->scanout[scanout_id].pixmap &&
fb != radeon_pixmap_get_fb(drmmode_crtc->
- scanout[scanout_id].pixmap))
+ scanout[scanout_id].pixmap)) {
+ drmmode_crtc_wait_pending_event(drmmode_crtc, pRADEONEnt->fd,
+ drmmode_crtc->scanout_update_pending);
drmmode_crtc_scanout_free(drmmode_crtc);
- else if (!drmmode_crtc->tear_free) {
+ } else if (!drmmode_crtc->tear_free) {
drmmode_crtc_scanout_destroy(drmmode,
&drmmode_crtc->scanout[1]);
}