• Chris Wilson's avatar
    drm/i915: Resurrect ring kicking for semaphores, selectively · a24a11e6
    Chris Wilson authored
    Once we thought we got semaphores working, we disabled kicking the ring
    if hangcheck fired whilst waiting upon a ring as it was doing more harm
    than good:
    
    commit 4e0e90dc
    Author: Daniel Vetter <daniel.vetter@ffwll.ch>
    Date:   Wed Dec 14 13:56:58 2011 +0100
    
        drm/i915: kicking rings stuck on semaphores considered harmful
    
    However, life is never that easy and semaphores are still causing
    problems whereby the value written by one ring (bcs) is not being
    propagated to the waiter (rcs). Thus the waiter never wakes up and we
    declare the GPU hung, which often has unfortunate consequences, even if
    we successfully reset the GPU.
    
    But the GPU is idle as it has completed the work, just didn't notify its
    clients. So we can detect the incomplete wait during hang check and
    probe the target ring to see if has indeed emitted the breadcrumb seqno
    following the work and then and only then kick the waiter.
    
    Based on a suggestion by Ben Widawsky.
    
    v2: cross-check wait with iphdr. fix signaller calculation.
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=54226Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Ben Widawsky <ben@bwidawsk.net>
    Acked-by: default avatarBen Widawsky <ben@bwidawsk.net>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    a24a11e6
i915_irq.c 82.1 KB