Commit 25e4b266 authored by Chris Wilson's avatar Chris Wilson Committed by Andi Shyti
Browse files

drm/i915/selftest: Always cancel semaphore on error



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: default avatarCQ Tang <cq.tang@intel.com>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: CQ Tang <cq.tang@intel.com>
cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Signed-off-by: default avatarRamalingam C <ramalingam.c@intel.com>
Reviewed-by: default avatarThomas Hellstrom <thomas.hellstrom@linux.intel.com>
Signed-off-by: default avatarKarolina Drobnik <karolina.drobnik@intel.com>
Reviewed-by: default avatarAndi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: default avatarAndi Shyti <andi.shyti@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/8b7781f7dbaf2791156491b76d5faa7852e5cbbb.1663081418.git.karolina.drobnik@intel.com
parent a062b8cf
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -1460,18 +1460,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 (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;
	}

	if (i915_request_wait(rq, 0, HZ / 2) < 0) {
	/* Always cancel the semaphore wait, just in case the GPU gets stuck */
	WRITE_ONCE(*sema, -1);
	i915_request_put(rq);
		err = -ETIME;
	if (err)
		goto err_result1;
	}
	i915_request_put(rq);

	err = compare_isolation(engine, ref, result, A, poison);