drm/i915: Remove IMR masking during interrupt handler, and restart it if needed.
authorEric Anholt <eric@anholt.net>
Tue, 4 Nov 2008 23:50:30 +0000 (15:50 -0800)
committerDave Airlie <airlied@redhat.com>
Mon, 24 Nov 2008 23:27:43 +0000 (09:27 +1000)
commitcdfbc41f6d602fc0105fb2b4e0645cc1aa274c12
tree94555bbfe2161c641494a82911a96b60783bca35
parent7c463586427bbbad726ba561bae4ba5acada2481
drm/i915: Remove IMR masking during interrupt handler, and restart it if needed.

The IMR masking was a technique recommended for avoiding getting stuck with
no interrupts generated again in MSI mode.  It kept new IIR bits from getting
set between the IIR read and the IIR write, which would have otherwise
prevented an MSI from ever getting generated again.  However, this caused a
problem for vblank as the IMR mask would keep the pipe event interrupt from
getting reflected in IIR, even after the IMR mask was brought back down.

Instead, just check the state of IIR after we ack the interrupts we're going
to handle, and restart if we didn't get IIR all the way to zero.

Signed-off-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/i915/i915_irq.c