From 6211d0914e2ed1cdd4cc2e170ee16129fc9f0d73 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 5 Sep 2012 12:33:08 +0100 Subject: [PATCH] uxa: Flush batch immediately after queuing a WAIT_FOR_EVENT We still encounter hangs with kernel-3.5 with the culprit being a wait on a disabled pipe. As we thoroughly check before that the pipe is still disabled and flush before a modeset, the only possibility that remains is that DPMS is disabling the pipe before we submit. Close that race by always submitting the batch immediately after a WAIT_FOR_EVENT. Signed-off-by: Chris Wilson --- src/intel_dri.c | 5 +++++ src/intel_video.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/intel_dri.c b/src/intel_dri.c index fa1660ca..a1bac9a8 100644 --- a/src/intel_dri.c +++ b/src/intel_dri.c @@ -540,6 +540,11 @@ I830DRI2CopyRegion(DrawablePtr drawable, RegionPtr pRegion, 0, 0); FreeScratchGC(gc); + + /* And make sure the WAIT_FOR_EVENT is queued before any + * modesetting/dpms operations on the pipe. + */ + intel_batch_submit(scrn); } #if DRI2INFOREC_VERSION >= 4 diff --git a/src/intel_video.c b/src/intel_video.c index 0be72e20..09782aa5 100644 --- a/src/intel_video.c +++ b/src/intel_video.c @@ -1585,6 +1585,11 @@ I830PutImageTextured(ScrnInfoPtr scrn, intel_get_screen_private(scrn)->needs_flush = TRUE; DamageDamageRegion(drawable, clipBoxes); + /* And make sure the WAIT_FOR_EVENT is queued before any + * modesetting/dpms operations on the pipe. + */ + intel_batch_submit(scrn); + return Success; }