[PATCH] hmm

Chris Wilson chris at chris-wilson.co.uk
Tue Apr 4 09:08:44 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 308c56a021ab..1b14c3be6046 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-trybot mailing list