drm/i915: Stop touching hangcheck.seqno from intel_engine_init_global_seqno()
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 21 Apr 2017 08:31:13 +0000 (09:31 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 21 Apr 2017 08:58:24 +0000 (09:58 +0100)
The hangcheck runs independently to the main flow of seqno through the
driver. However, we have an odd coupling of the seqno reset that is
unwelcome, and if poked at just the right rate can cause spurious hangs
(e.g. gem_exec_whisper) on an apparently idle engine.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170421083113.21321-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/intel_engine_cs.c

index 402769d9d840f3bb9626f780c3472b48f832aeca..82a274b336c5b206e3e08e96552860093fc3204a 100644 (file)
@@ -265,6 +265,7 @@ void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno)
        struct drm_i915_private *dev_priv = engine->i915;
 
        GEM_BUG_ON(!intel_engine_is_idle(engine));
+       GEM_BUG_ON(i915_gem_active_isset(&engine->timeline->last_request));
 
        /* Our semaphore implementation is strictly monotonic (i.e. we proceed
         * so long as the semaphore value in the register/page is greater
@@ -296,9 +297,6 @@ void intel_engine_init_global_seqno(struct intel_engine_cs *engine, u32 seqno)
        intel_write_status_page(engine, I915_GEM_HWS_INDEX, seqno);
        clear_bit(ENGINE_IRQ_BREADCRUMB, &engine->irq_posted);
 
-       GEM_BUG_ON(i915_gem_active_isset(&engine->timeline->last_request));
-       engine->hangcheck.seqno = seqno;
-
        /* After manually advancing the seqno, fake the interrupt in case
         * there are any waiters for that seqno.
         */