• Oscar Mateo's avatar
    drm/i915/bdw: Ack interrupts before handling them (GEN8) · 38cc46d7
    Oscar Mateo authored
    Otherwise, we might receive a new interrupt before we have time to
    ack the first one, eventually missing it.
    
    The right order should be:
    
    1 - Disable Master Interrupt Control.
    2 - Find the category of interrupt that is pending.
    3 - Find the source(s) of the interrupt and 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).
    
    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 code comment.
    Signed-off-by: default avatarOscar Mateo <oscar.mateo@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    38cc46d7
i915_irq.c 127 KB