drm/i915/gt: Cancel the preemption timeout on responding to it
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:3a7a92aba8
("drm/i915/execlists: Force preemption") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: <stable@vger.kernel.org> # v5.5+ Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20201204151234.19729-2-chris@chris-wilson.co.uk (cherry picked from commitd997e240ce
) Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
parent
5419d93ffd
commit
0fe8bf4d3e
@ -3172,8 +3172,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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user