Quoting Chris Wilson (2020-01-22 11:29:03) > Thanks to preempt-to-busy, we leave the request on the HW as we submit > the preemption request. This means that the request may complete at any > moment as we process HW events, and in particular the request may be > retired as we are planning to capture it for a preemption timeout. > > Be more careful while obtaining the request to capture after a > preemption timeout, and check to see if it completed before we were able > to put it on the on-hold list. If we do see it did complete just before > we capture the request, proclaim the preemption-timeout a false positive > and pardon the reset as we should hit an arbitration point momentarily > and so be able to process the preemption. > > Note that even after we move the request to be on hold it may be retired > (as the reset to stop the HW comes after), so we do require to hold our > own reference as we work on the request for capture (and all of the > peeking at state within the request needs to be carefully protected). > > Fixes: 32ff621fd744 ("drm/i915/gt: Allow temporary suspension of inflight requests") > Closes: https://gitlab.freedesktop.org/drm/intel/issues/997 > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > --- > drivers/gpu/drm/i915/gt/intel_lrc.c | 39 +++++++++++++++++++++++------ > 1 file changed, 31 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c > index 3a30767ff0c4..59af136e1b1d 100644 > --- a/drivers/gpu/drm/i915/gt/intel_lrc.c > +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c > @@ -2393,11 +2393,16 @@ static void __execlists_hold(struct i915_request *rq) > } while (rq); > } > > -static void execlists_hold(struct intel_engine_cs *engine, > +static bool execlists_hold(struct intel_engine_cs *engine, > struct i915_request *rq) > { > spin_lock_irq(&engine->active.lock); > > + if (!i915_request_is_ready(rq)) { /* no longer active */ Actually this will be better as !i915_request_completed() so it protects the virtual_engine shenanigans better. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx