• Chris Wilson's avatar
    drm/i915: Fixup preempt-to-busy vs reset of a virtual request · cb2377a9
    Chris Wilson authored
    Due to the nature of preempt-to-busy the execlists active tracking and
    the schedule queue may become temporarily desync'ed (between resubmission
    to HW and its ack from HW). This means that we may have unwound a
    request and passed it back to the virtual engine, but it is still
    inflight on the HW and may even result in a GPU hang. If we detect that
    GPU hang and try to reset, the hanging request->engine will no longer
    match the current engine, which means that the request is not on the
    execlists active list and we should not try to find an older incomplete
    request. Given that we have deduced this must be a request on a virtual
    engine, it is the single active request in the context and so must be
    guilty (as the context is still inflight, it is prevented from being
    executed on another engine as we process the reset).
    
    Fixes: 22b7a426 ("drm/i915/execlists: Preempt-to-busy")
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190923152844.8914-2-chris@chris-wilson.co.uk
    cb2377a9
intel_lrc.c 122 KB