[Intel-gfx] [PATCH] hmm

Chris Wilson chris at chris-wilson.co.uk
Tue Apr 4 10:23:46 UTC 2017


---
 drivers/gpu/drm/i915/intel_breadcrumbs.c | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_breadcrumbs.c b/drivers/gpu/drm/i915/intel_breadcrumbs.c
index 2044dee3cce4..39f585abd3fd 100644
--- a/drivers/gpu/drm/i915/intel_breadcrumbs.c
+++ b/drivers/gpu/drm/i915/intel_breadcrumbs.c
@@ -80,12 +80,6 @@ static void intel_breadcrumbs_hangcheck(unsigned long data)
 	if (!b->irq_armed)
 		return;
 
-	if (b->hangcheck_interrupts != atomic_read(&engine->irq_count)) {
-		b->hangcheck_interrupts = atomic_read(&engine->irq_count);
-		mod_timer(&b->hangcheck, wait_timeout());
-		return;
-	}
-
 	/* We keep the hangcheck timer alive until we disarm the irq, even
 	 * if there are no waiters at present.
 	 *
@@ -98,10 +92,12 @@ static void intel_breadcrumbs_hangcheck(unsigned long data)
 	 * but we still have a waiter. Assuming all batches complete within
 	 * DRM_I915_HANGCHECK_JIFFIES [1.5s]!
 	 */
-	if (intel_engine_wakeup(engine) & ENGINE_WAKEUP_ASLEEP) {
+	if (intel_engine_wakeup(engine) & ENGINE_WAKEUP_ASLEEP &&
+	    b->hangcheck_interrupts == atomic_read(&engine->irq_count)) {
 		missed_breadcrumb(engine);
 		mod_timer(&engine->breadcrumbs.fake_irq, jiffies + 1);
 	} else {
+		b->hangcheck_interrupts = atomic_read(&engine->irq_count);
 		mod_timer(&b->hangcheck, wait_timeout());
 	}
 }
-- 
2.11.0



More information about the Intel-gfx mailing list