drm/i915/execlists: Reinitialise context image after GPU hang
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 4 Oct 2016 20:11:26 +0000 (21:11 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 5 Oct 2016 07:40:05 +0000 (08:40 +0100)
commita3aabe86a3406b9946a4f7707762a833a58dfe9c
treef356e5328d4c61076fca44fb1bae858ce2a4422a
parent62ae14b1edca0aaf27b84b3fa069177dd794e37f
drm/i915/execlists: Reinitialise context image after GPU hang

On Braswell, at least, we observe that the context image is written in
multiple phases. The first phase is to clear the register state, and
subsequently rewrite it. A GPU reset at the right moment can interrupt
the context update leaving it corrupt, and our update of the RING_HEAD
is not sufficient to restart the engine afterwards. To recover, we need
to reset the registers back to their original values. The context state
is lost. What we need is a better mechanism to serialise the reset with
pending flushes from the GPU.

Fixes: 821ed7df6e2a ("drm/i915: Update reset path to fix incomplete requests")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161004201132.21801-2-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/intel_lrc.c