Message ID | 20220314182005.17071-5-ramalingam.c@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | lrc selftest fixes | expand |
On 3/14/22 19:20, Ramalingam C wrote: > From: Chris Wilson <chris@chris-wilson.co.uk> > > Ensure that we always signal the semaphore when timing out, so that if it > happens to be stuck waiting for the semaphore we will quickly recover > without having to wait for a reset. > > Reported-by: CQ Tang <cq.tang@intel.com> > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: CQ Tang <cq.tang@intel.com> > cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Signed-off-by: Ramalingam C <ramalingam.c@intel.com> Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> > --- > drivers/gpu/drm/i915/gt/selftest_lrc.c | 17 ++++++++--------- > 1 file changed, 8 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c > index b9cc89de01bf..ae16668dd9d4 100644 > --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c > +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c > @@ -1435,18 +1435,17 @@ static int __lrc_isolation(struct intel_engine_cs *engine, u32 poison) > } > > err = poison_registers(B, poison, sema); > - if (err) { > - WRITE_ONCE(*sema, -1); > - i915_request_put(rq); > - goto err_result1; > - } > - > - if (i915_request_wait(rq, 0, HZ / 2) < 0) { > - i915_request_put(rq); > + if (err == 0 && i915_request_wait(rq, 0, HZ / 2) < 0) { > + pr_err("%s(%s): wait for results timed out\n", > + __func__, engine->name); > err = -ETIME; > - goto err_result1; > } > + > + /* Always cancel the semaphore wait, just in case the GPU gets stuck */ > + WRITE_ONCE(*sema, -1); > i915_request_put(rq); > + if (err) > + goto err_result1; > > err = compare_isolation(engine, ref, result, A, poison); >
diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c index b9cc89de01bf..ae16668dd9d4 100644 --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c @@ -1435,18 +1435,17 @@ static int __lrc_isolation(struct intel_engine_cs *engine, u32 poison) } err = poison_registers(B, poison, sema); - if (err) { - WRITE_ONCE(*sema, -1); - i915_request_put(rq); - goto err_result1; - } - - if (i915_request_wait(rq, 0, HZ / 2) < 0) { - i915_request_put(rq); + if (err == 0 && i915_request_wait(rq, 0, HZ / 2) < 0) { + pr_err("%s(%s): wait for results timed out\n", + __func__, engine->name); err = -ETIME; - goto err_result1; } + + /* Always cancel the semaphore wait, just in case the GPU gets stuck */ + WRITE_ONCE(*sema, -1); i915_request_put(rq); + if (err) + goto err_result1; err = compare_isolation(engine, ref, result, A, poison);