• O
    drm/i915: Ack interrupts before handling them (GEN5 - GEN7) · 72c90f62
    Oscar Mateo 提交于
    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: NOscar Mateo <oscar.mateo@intel.com>
    Reviewed-by: NImre Deak <imre.deak@intel.com>
    Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
    72c90f62
i915_irq.c 126.3 KB