]> git.baikalelectronics.ru Git - kernel.git/commit
drm/i915: Ack interrupts before handling them (GEN5 - GEN7)
authorOscar Mateo <oscar.mateo@intel.com>
Mon, 16 Jun 2014 15:10:57 +0000 (16:10 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 17 Jun 2014 22:48:37 +0000 (00:48 +0200)
commit0b13116f6267524e81f4681029046c4a336572e6
tree366ac34d90922385b0151e18056421d15a3d40e9
parent5246874dc9a9a3b0b6a8120a7669daf8764575ce
drm/i915: Ack interrupts before handling them (GEN5 - GEN7)

Otherwise, we might receive a new interrupt before we have time to ack the first
one, eventually missing it.

According to BSPec, the right order should be:

1 - Disable Master Interrupt Control.
2 - Find the source(s) of the interrupt.
3 - Clear the Interrupt Identity bits (IIR).
4 - Process the interrupt(s) that had bits set in the IIRs.
5 - Re-enable Master Interrupt Control.

Without an atomic XCHG operation with mmio space, the above merely reduces the window
in which we can miss an interrupt (especially when you consider how heavyweight the
I915_READ/I915_WRITE operations are).

We maintain the "disable SDE interrupts when handling" hack since apparently it works.

Spotted by Bob Beckett <robert.beckett@intel.com>.

v2: Add warning to commit message and comments to the code as per Chris Wilson's request.
v3: Improve the source comments.

Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_irq.c