]> git.karo-electronics.de Git - karo-tx-linux.git/commit
drm/i915: Improve irq handling after gpu resets
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 22 May 2014 20:18:21 +0000 (22:18 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 26 May 2014 13:17:38 +0000 (15:17 +0200)
commite0693a4cec1eec9dbb8f4e0d856ba5a9f3aa2a24
treea45956628d9d7526a66f3c9ef6bdf0cc83cfe89d
parent225d9c33650b929bc76e024dcd94ccb11de97cc2
drm/i915: Improve irq handling after gpu resets

Currently we do a full re-init of all interrupts after a gpu hang.
Which is pretty bad since we don't restore the interrupts we've
enabled at runtime correctly. Even with that addressed it's rather
horribly race.

But on g4x and later we only reset the gt and not the entire gpu.
Which means we only need to reset the GT interrupt bits. Which has the
nice benefit that vblank waits, pipe CRC interrupts and everything
else display related just keeps on working.

The downside is that gt interrupt handling (i.e. ring->get/put_irq) is
still racy. But as long as the gpu hang reliably wakes all waters and
we have a short time where the refcount drops to 0 we'll recover. So
not that bad really.

v2: Ville noticed that GTIMR and PMIMR don't get cleared, only the
subordinate per-ring registers. So let's rip out all the interrupt dancing.
The FIXME comment is still required though since the ring irq handling
happens at the per-ring interrupt mask registers, too.

Testcase: igt/kms_flip/vblank-vs-hang
Testcase: igt/kms_pipe_crc_basic/hang-*
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_drv.c