[Intel-gfx] [PATCH v2] drm/i915: Ignore -EIO from __i915_wait_request() during flips

ville.syrjala at linux.intel.com ville.syrjala at linux.intel.com
Thu Jun 11 10:05:58 PDT 2015


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

When the GPU gets reset __i915_wait_request() returns -EIO to the
mmio flip worker. Currently we WARN whenever we get anything other
than 0. Ignore the -EIO too since it's a perfectly normal thing
to get during a GPU reset.

Also give intel_finish_fb() the same treatment, which triggers now at
least with CS flips on my gen4.

The intel_finish_fb() warning got added in
 commit 2e2f351dbf29681d54a3a0f1003c5bb9bc832072
 Author: Chris Wilson <chris at chris-wilson.co.uk>
 Date:   Mon Apr 27 13:41:14 2015 +0100

    drm/i915: Remove domain flubbing from i915_gem_object_finish_gpu()

The mmio flip one in
 commit 536f5b5e86b225dab94c7ff8061ae482b6077387
 Author: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira at intel.com>
 Date:   Thu Nov 6 11:03:40 2014 +0200

    drm/i915: Make mmio flip wait for seqno in the work function

v2: Ignore -EIO in intel_finish_fb() too

Cc: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira at intel.com>
Cc: Chris Wilson <chris at chris-wilson.co.uk>
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 9bf759c..0e4720e 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3279,7 +3279,7 @@ intel_finish_fb(struct drm_framebuffer *old_fb)
 	ret = i915_gem_object_wait_rendering(obj, true);
 	dev_priv->mm.interruptible = was_interruptible;
 
-	WARN_ON(ret);
+	WARN_ON(ret != 0 && ret != -EIO);
 }
 
 static bool intel_crtc_has_pending_flip(struct drm_crtc *crtc)
@@ -11327,11 +11327,13 @@ static void intel_mmio_flip_work_func(struct work_struct *work)
 	struct intel_mmio_flip *mmio_flip =
 		container_of(work, struct intel_mmio_flip, work);
 
-	if (mmio_flip->req)
-		WARN_ON(__i915_wait_request(mmio_flip->req,
-					    mmio_flip->crtc->reset_counter,
-					    false, NULL,
-					    &mmio_flip->i915->rps.mmioflips));
+	if (mmio_flip->req) {
+		int ret = __i915_wait_request(mmio_flip->req,
+					      mmio_flip->crtc->reset_counter,
+					      false, NULL,
+					      &mmio_flip->i915->rps.mmioflips);
+		WARN_ON(ret != 0 && ret != -EIO);
+	}
 
 	intel_do_mmio_flip(mmio_flip->crtc);
 
-- 
2.3.6



More information about the Intel-gfx mailing list