Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> writes: > We currently presume that the engine reset is successful, cancelling the > expired preemption timer in the process. However, engine resets can > fail, leaving the timeout still pending and we will then respond to the > timeout again next time the tasklet fires. What we want is for the > failed engine reset to be promoted to a full device reset, which is > kicked by the heartbeat once the engine stops processing events. > > Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/1168 > Fixes: 3a7a92aba8fb ("drm/i915/execlists: Force preemption") > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> # v5.5+ Reviewed-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/gt/intel_lrc.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c > index 1d209a8a95e8..7f25894e41d5 100644 > --- a/drivers/gpu/drm/i915/gt/intel_lrc.c > +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c > @@ -3209,8 +3209,10 @@ static void execlists_submission_tasklet(unsigned long data) > spin_unlock_irqrestore(&engine->active.lock, flags); > > /* Recheck after serialising with direct-submission */ > - if (unlikely(timeout && preempt_timeout(engine))) > + if (unlikely(timeout && preempt_timeout(engine))) { > + cancel_timer(&engine->execlists.preempt); > execlists_reset(engine, "preemption time out"); > + } > } > } > > -- > 2.20.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx