drm/i915: Kick waiters on resetting legacy rings
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 14 Aug 2018 10:40:56 +0000 (11:40 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 14 Aug 2018 11:42:29 +0000 (12:42 +0100)
This reapplies commit 39f3be162c46 ("drm/i915: Kick waiters on resetting
legacy rings") after the improved gem_eio was run across all machines we
found that gen3 and early gen4 still lost the immediate interrupt
following reset, and the HWSTAM w/a applied to gen6+ is inadequate.

Unlike the later gen, on gen3/4 the principle (and only tests to fail so
far) are the wait vs reset test cases, whereas the reset stress case
works fine (which was the predominantly failing case for gen6+). That is
enough to suggest the underlying issue is sufficiently different to
support the difference in HWSTAM efficacy.

Testcase: igt/gem_eio/wait-10ms
References: 39f3be162c46 ("drm/i915: Kick waiters on resetting legacy rings")
References: a69ab52b0358 ("drm/i915: Remove extra waiter kick on legacy resets")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180814104056.27001-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/intel_ringbuffer.c

index b65cf7832b3982b816a81cf0ca15ad961c372232..d40f55a8dc34a3ecb6e0463d3ddee1136dac1480 100644 (file)
@@ -537,6 +537,8 @@ static int init_ring_common(struct intel_engine_cs *engine)
        if (INTEL_GEN(dev_priv) > 2)
                I915_WRITE_MODE(engine, _MASKED_BIT_DISABLE(STOP_RING));
 
+       /* Papering over lost _interrupts_ immediately following the restart */
+       intel_engine_wakeup(engine);
 out:
        intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);