[igt-dev] [PATCH i-g-t] tests/i915/i915_hangman: add DG2 wa for hang subtest

Umesh Nerlige Ramappa umesh.nerlige.ramappa at intel.com
Wed Jul 13 23:30:04 UTC 2022


On Wed, Jul 13, 2022 at 05:48:16PM +0200, Kamil Konieczny wrote:
>DG2 requires a workaround that prevents context switches on CCS when
>RCS is not idle. That breaks the hangman test because a hang on RCS
>means CCS cannot switch. Thus, the well behaved background task on CCS
>is seen as hanging and thus the test fails. The same problem is seen
>on RCS when CCS is hang, so do not use the other one when causing hang.
>
>Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/5884
>Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
>Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
>Signed-off-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
>---
> tests/i915/i915_hangman.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
>diff --git a/tests/i915/i915_hangman.c b/tests/i915/i915_hangman.c
>index 687dee14..9e244a10 100644
>--- a/tests/i915/i915_hangman.c
>+++ b/tests/i915/i915_hangman.c
>@@ -304,11 +304,17 @@ test_engine_hang(const intel_ctx_t *ctx,
> 	igt_spin_t *spin, *next;
> 	IGT_LIST_HEAD(list);
> 	uint64_t ahnd = get_reloc_ahnd(device, ctx->id), ahndN;
>+	int skip_class = -1;
> 	int num_ctx;
>
> 	igt_skip_on(flags & IGT_SPIN_INVALID_CS &&
> 		    gem_engine_has_cmdparser(device, &ctx->cfg, e->flags));
>
>+	/* Wa_14014494547:DG2 hang on RCS means CCS cannot switch */
>+	if (IS_DG2(intel_get_drm_devid(device)))
>+		skip_class = e->class == I915_ENGINE_CLASS_RENDER ? I915_ENGINE_CLASS_COMPUTE :
>+					 I915_ENGINE_CLASS_RENDER;
>+

This works, but also has a side effect of skipping background batch on 
render when testing media engines. Based on the commit msg, I think you 
want to skip render for compute specific hangs only.

Regards,
Umesh

> 	/*
> 	 * Fill all engines with background load.
> 	 * This verifies that independent engines are unaffected and gives
>@@ -317,6 +323,9 @@ test_engine_hang(const intel_ctx_t *ctx,
> 	 */
> 	num_ctx = 0;
> 	for_each_ctx_engine(device, ctx, other) {
>+		if (other->class == skip_class)
>+			continue;
>+
> 		local_ctx[num_ctx] = intel_ctx_create(device, &ctx->cfg);
> 		context_unban(device, local_ctx[num_ctx]->id);
> 		ahndN = get_reloc_ahnd(device, local_ctx[num_ctx]->id);
>-- 
>2.34.1
>


More information about the igt-dev mailing list