• Chris Wilson's avatar
    drm/i915: Fix __wait_seqno to use true infinite timeouts · 094f9a54
    Chris Wilson authored
    When we switched to always using a timeout in conjunction with
    wait_seqno, we lost the ability to detect missed interrupts. Since, we
    have had issues with interrupts on a number of generations, and they are
    required to be delivered in a timely fashion for a smooth UX, it is
    important that we do log errors found in the wild and prevent the
    display stalling for upwards of 1s every time the seqno interrupt is
    missed.
    
    Rather than continue to fix up the timeouts to work around the interface
    impedence in wait_event_*(), open code the combination of
    wait_event[_interruptible][_timeout], and use the exposed timer to
    poll for seqno should we detect a lost interrupt.
    
    v2: In order to satisfy the debug requirement of logging missed
    interrupts with the real world requirments of making machines work even
    if interrupts are hosed, we revert to polling after detecting a missed
    interrupt.
    
    v3: Throw in a debugfs interface to simulate broken hw not reporting
    interrupts.
    
    v4: s/EGAIN/EAGAIN/ (Imre)
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarImre Deak <imre.deak@intel.com>
    [danvet: Don't use the struct typedef in new code.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    094f9a54
i915_drv.h 73.7 KB