• Daniel Vetter's avatar
    drm/i915: don't return a spurious -EIO from intel_ring_begin · de2b9985
    Daniel Vetter authored
    The issue with this check is that it results in userspace receiving an
    -EIO while the gpu reset hasn't completed, resulting in fallback to sw
    rendering or worse.
    
    Now there's also a stern comment in intel_ring_wait_seqno saying that
    intel_ring_begin should not return -EAGAIN, ever, because some callers
    can't handle that. But after an audit of the callsites I don't see any
    issues. I guess the last problematic spot disappeared with the removal
    of the pipelined fencing code.
    
    So do the right thing and call check_wedge, which should properly
    decide whether an -EAGAIN or -EIO is appropriate if wedged is set.
    
    Note that the early check for a wedged gpu before touching the ring is
    rather important (and it took me quite some time of acting like the
    densest doofus to figure that out): If we don't do that and the gpu
    died for good, not having been resurrect by the reset code, userspace
    can merrily fill up the entire ring until it notices that something is
    amiss.
    
    Allowing userspace to emit more render, despite that we know that it
    will fail can't lead to anything good (and by experience can lead to
    all sorts of havoc, including angering the OOM gods and hard-hanging
    the hw for good).
    
    v2: Fix EAGAIN mispell, noticed by Chris Wilson.
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Tested-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-Off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    de2b9985
intel_ringbuffer.c 39.3 KB