[Intel-gfx] [PATCH v3] drm/i915/selftests: Pass intel_context to igt_spinner

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Wed Jul 31 08:25:04 UTC 2019


On 31/07/2019 09:11, Chris Wilson wrote:
> Teach igt_spinner to only use our internal structs, decoupling the
> interface from the GEM contexts. This makes it easier to avoid
> requiring ce->gem_context back references for kernel_context that may
> have them in future.
> 
> v2: Lift engine lock to verify_wa() caller.
> v3: Less than v2, but more so
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
>   .../drm/i915/gem/selftests/i915_gem_context.c |  43 +++----
>   drivers/gpu/drm/i915/gt/selftest_lrc.c        | 115 ++++++++++--------
>   .../gpu/drm/i915/gt/selftest_workarounds.c    |  28 +++--
>   drivers/gpu/drm/i915/selftests/igt_spinner.c  |  25 ++--
>   drivers/gpu/drm/i915/selftests/igt_spinner.h  |   6 +-
>   5 files changed, 117 insertions(+), 100 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> index 7f9f6701b32c..c24430352a38 100644
> --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
> @@ -821,8 +821,7 @@ emit_rpcs_query(struct drm_i915_gem_object *obj,
>   #define TEST_RESET	BIT(2)
>   
>   static int
> -__sseu_prepare(struct drm_i915_private *i915,
> -	       const char *name,
> +__sseu_prepare(const char *name,
>   	       unsigned int flags,
>   	       struct intel_context *ce,
>   	       struct igt_spinner **spin)
> @@ -838,14 +837,11 @@ __sseu_prepare(struct drm_i915_private *i915,
>   	if (!*spin)
>   		return -ENOMEM;
>   
> -	ret = igt_spinner_init(*spin, i915);
> +	ret = igt_spinner_init(*spin, ce->engine->gt);
>   	if (ret)
>   		goto err_free;
>   
> -	rq = igt_spinner_create_request(*spin,
> -					ce->gem_context,
> -					ce->engine,
> -					MI_NOOP);
> +	rq = igt_spinner_create_request(*spin, ce, MI_NOOP);
>   	if (IS_ERR(rq)) {
>   		ret = PTR_ERR(rq);
>   		goto err_fini;
> @@ -871,8 +867,7 @@ __sseu_prepare(struct drm_i915_private *i915,
>   }
>   
>   static int
> -__read_slice_count(struct drm_i915_private *i915,
> -		   struct intel_context *ce,
> +__read_slice_count(struct intel_context *ce,
>   		   struct drm_i915_gem_object *obj,
>   		   struct igt_spinner *spin,
>   		   u32 *rpcs)
> @@ -901,7 +896,7 @@ __read_slice_count(struct drm_i915_private *i915,
>   		return ret;
>   	}
>   
> -	if (INTEL_GEN(i915) >= 11) {
> +	if (INTEL_GEN(ce->engine->i915) >= 11) {
>   		s_mask = GEN11_RPCS_S_CNT_MASK;
>   		s_shift = GEN11_RPCS_S_CNT_SHIFT;
>   	} else {
> @@ -944,8 +939,7 @@ __check_rpcs(const char *name, u32 rpcs, int slices, unsigned int expected,
>   }
>   
>   static int
> -__sseu_finish(struct drm_i915_private *i915,
> -	      const char *name,
> +__sseu_finish(const char *name,
>   	      unsigned int flags,
>   	      struct intel_context *ce,
>   	      struct drm_i915_gem_object *obj,
> @@ -962,14 +956,13 @@ __sseu_finish(struct drm_i915_private *i915,
>   			goto out;
>   	}
>   
> -	ret = __read_slice_count(i915, ce, obj,
> +	ret = __read_slice_count(ce, obj,
>   				 flags & TEST_RESET ? NULL : spin, &rpcs);
>   	ret = __check_rpcs(name, rpcs, ret, expected, "Context", "!");
>   	if (ret)
>   		goto out;
>   
> -	ret = __read_slice_count(i915, ce->engine->kernel_context, obj,
> -				 NULL, &rpcs);
> +	ret = __read_slice_count(ce->engine->kernel_context, obj, NULL, &rpcs);
>   	ret = __check_rpcs(name, rpcs, ret, slices, "Kernel context", "!");
>   
>   out:
> @@ -977,11 +970,12 @@ __sseu_finish(struct drm_i915_private *i915,
>   		igt_spinner_end(spin);
>   
>   	if ((flags & TEST_IDLE) && ret == 0) {
> -		ret = i915_gem_wait_for_idle(i915, 0, MAX_SCHEDULE_TIMEOUT);
> +		ret = i915_gem_wait_for_idle(ce->engine->i915,
> +					     0, MAX_SCHEDULE_TIMEOUT);
>   		if (ret)
>   			return ret;
>   
> -		ret = __read_slice_count(i915, ce, obj, NULL, &rpcs);
> +		ret = __read_slice_count(ce, obj, NULL, &rpcs);
>   		ret = __check_rpcs(name, rpcs, ret, expected,
>   				   "Context", " after idle!");
>   	}
> @@ -990,8 +984,7 @@ __sseu_finish(struct drm_i915_private *i915,
>   }
>   
>   static int
> -__sseu_test(struct drm_i915_private *i915,
> -	    const char *name,
> +__sseu_test(const char *name,
>   	    unsigned int flags,
>   	    struct intel_context *ce,
>   	    struct drm_i915_gem_object *obj,
> @@ -1000,7 +993,7 @@ __sseu_test(struct drm_i915_private *i915,
>   	struct igt_spinner *spin = NULL;
>   	int ret;
>   
> -	ret = __sseu_prepare(i915, name, flags, ce, &spin);
> +	ret = __sseu_prepare(name, flags, ce, &spin);
>   	if (ret)
>   		return ret;
>   
> @@ -1008,7 +1001,7 @@ __sseu_test(struct drm_i915_private *i915,
>   	if (ret)
>   		goto out_spin;
>   
> -	ret = __sseu_finish(i915, name, flags, ce, obj,
> +	ret = __sseu_finish(name, flags, ce, obj,
>   			    hweight32(sseu.slice_mask), spin);
>   
>   out_spin:
> @@ -1088,22 +1081,22 @@ __igt_ctx_sseu(struct drm_i915_private *i915,
>   		goto out_context;
>   
>   	/* First set the default mask. */
> -	ret = __sseu_test(i915, name, flags, ce, obj, engine->sseu);
> +	ret = __sseu_test(name, flags, ce, obj, engine->sseu);
>   	if (ret)
>   		goto out_fail;
>   
>   	/* Then set a power-gated configuration. */
> -	ret = __sseu_test(i915, name, flags, ce, obj, pg_sseu);
> +	ret = __sseu_test(name, flags, ce, obj, pg_sseu);
>   	if (ret)
>   		goto out_fail;
>   
>   	/* Back to defaults. */
> -	ret = __sseu_test(i915, name, flags, ce, obj, engine->sseu);
> +	ret = __sseu_test(name, flags, ce, obj, engine->sseu);
>   	if (ret)
>   		goto out_fail;
>   
>   	/* One last power-gated configuration for the road. */
> -	ret = __sseu_test(i915, name, flags, ce, obj, pg_sseu);
> +	ret = __sseu_test(name, flags, ce, obj, pg_sseu);
>   	if (ret)
>   		goto out_fail;
>   
> diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c
> index 60f27e52d267..b40b57d2daae 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c
> @@ -22,9 +22,9 @@
>   static int live_sanitycheck(void *arg)
>   {
>   	struct drm_i915_private *i915 = arg;
> -	struct intel_engine_cs *engine;
> +	struct i915_gem_engines_iter it;
>   	struct i915_gem_context *ctx;
> -	enum intel_engine_id id;
> +	struct intel_context *ce;
>   	struct igt_spinner spin;
>   	intel_wakeref_t wakeref;
>   	int err = -ENOMEM;
> @@ -35,17 +35,17 @@ static int live_sanitycheck(void *arg)
>   	mutex_lock(&i915->drm.struct_mutex);
>   	wakeref = intel_runtime_pm_get(&i915->runtime_pm);
>   
> -	if (igt_spinner_init(&spin, i915))
> +	if (igt_spinner_init(&spin, &i915->gt))
>   		goto err_unlock;
>   
>   	ctx = kernel_context(i915);
>   	if (!ctx)
>   		goto err_spin;
>   
> -	for_each_engine(engine, i915, id) {
> +	for_each_gem_engine(ce, i915_gem_context_lock_engines(ctx), it) {
>   		struct i915_request *rq;
>   
> -		rq = igt_spinner_create_request(&spin, ctx, engine, MI_NOOP);
> +		rq = igt_spinner_create_request(&spin, ce, MI_NOOP);
>   		if (IS_ERR(rq)) {
>   			err = PTR_ERR(rq);
>   			goto err_ctx;
> @@ -69,6 +69,7 @@ static int live_sanitycheck(void *arg)
>   
>   	err = 0;
>   err_ctx:
> +	i915_gem_context_unlock_engines(ctx);
>   	kernel_context_close(ctx);
>   err_spin:
>   	igt_spinner_fini(&spin);
> @@ -480,6 +481,24 @@ static int live_busywait_preempt(void *arg)
>   	return err;
>   }
>   
> +static struct i915_request *
> +spinner_create_request(struct igt_spinner *spin,
> +		       struct i915_gem_context *ctx,
> +		       struct intel_engine_cs *engine,
> +		       u32 arb)
> +{
> +	struct intel_context *ce;
> +	struct i915_request *rq;
> +
> +	ce = i915_gem_context_get_engine(ctx, engine->id);
> +	if (IS_ERR(ce))
> +		return ERR_CAST(ce);
> +
> +	rq = igt_spinner_create_request(spin, ce, arb);
> +	intel_context_put(ce);
> +	return rq;
> +}
> +
>   static int live_preempt(void *arg)
>   {
>   	struct drm_i915_private *i915 = arg;
> @@ -499,10 +518,10 @@ static int live_preempt(void *arg)
>   	mutex_lock(&i915->drm.struct_mutex);
>   	wakeref = intel_runtime_pm_get(&i915->runtime_pm);
>   
> -	if (igt_spinner_init(&spin_hi, i915))
> +	if (igt_spinner_init(&spin_hi, &i915->gt))
>   		goto err_unlock;
>   
> -	if (igt_spinner_init(&spin_lo, i915))
> +	if (igt_spinner_init(&spin_lo, &i915->gt))
>   		goto err_spin_hi;
>   
>   	ctx_hi = kernel_context(i915);
> @@ -529,8 +548,8 @@ static int live_preempt(void *arg)
>   			goto err_ctx_lo;
>   		}
>   
> -		rq = igt_spinner_create_request(&spin_lo, ctx_lo, engine,
> -						MI_ARB_CHECK);
> +		rq = spinner_create_request(&spin_lo, ctx_lo, engine,
> +					    MI_ARB_CHECK);
>   		if (IS_ERR(rq)) {
>   			err = PTR_ERR(rq);
>   			goto err_ctx_lo;
> @@ -545,8 +564,8 @@ static int live_preempt(void *arg)
>   			goto err_ctx_lo;
>   		}
>   
> -		rq = igt_spinner_create_request(&spin_hi, ctx_hi, engine,
> -						MI_ARB_CHECK);
> +		rq = spinner_create_request(&spin_hi, ctx_hi, engine,
> +					    MI_ARB_CHECK);
>   		if (IS_ERR(rq)) {
>   			igt_spinner_end(&spin_lo);
>   			err = PTR_ERR(rq);
> @@ -603,10 +622,10 @@ static int live_late_preempt(void *arg)
>   	mutex_lock(&i915->drm.struct_mutex);
>   	wakeref = intel_runtime_pm_get(&i915->runtime_pm);
>   
> -	if (igt_spinner_init(&spin_hi, i915))
> +	if (igt_spinner_init(&spin_hi, &i915->gt))
>   		goto err_unlock;
>   
> -	if (igt_spinner_init(&spin_lo, i915))
> +	if (igt_spinner_init(&spin_lo, &i915->gt))
>   		goto err_spin_hi;
>   
>   	ctx_hi = kernel_context(i915);
> @@ -632,8 +651,8 @@ static int live_late_preempt(void *arg)
>   			goto err_ctx_lo;
>   		}
>   
> -		rq = igt_spinner_create_request(&spin_lo, ctx_lo, engine,
> -						MI_ARB_CHECK);
> +		rq = spinner_create_request(&spin_lo, ctx_lo, engine,
> +					    MI_ARB_CHECK);
>   		if (IS_ERR(rq)) {
>   			err = PTR_ERR(rq);
>   			goto err_ctx_lo;
> @@ -645,8 +664,8 @@ static int live_late_preempt(void *arg)
>   			goto err_wedged;
>   		}
>   
> -		rq = igt_spinner_create_request(&spin_hi, ctx_hi, engine,
> -						MI_NOOP);
> +		rq = spinner_create_request(&spin_hi, ctx_hi, engine,
> +					    MI_NOOP);
>   		if (IS_ERR(rq)) {
>   			igt_spinner_end(&spin_lo);
>   			err = PTR_ERR(rq);
> @@ -711,7 +730,7 @@ static int preempt_client_init(struct drm_i915_private *i915,
>   	if (!c->ctx)
>   		return -ENOMEM;
>   
> -	if (igt_spinner_init(&c->spin, i915))
> +	if (igt_spinner_init(&c->spin, &i915->gt))
>   		goto err_ctx;
>   
>   	return 0;
> @@ -761,9 +780,9 @@ static int live_nopreempt(void *arg)
>   
>   		engine->execlists.preempt_hang.count = 0;
>   
> -		rq_a = igt_spinner_create_request(&a.spin,
> -						  a.ctx, engine,
> -						  MI_ARB_CHECK);
> +		rq_a = spinner_create_request(&a.spin,
> +					      a.ctx, engine,
> +					      MI_ARB_CHECK);
>   		if (IS_ERR(rq_a)) {
>   			err = PTR_ERR(rq_a);
>   			goto err_client_b;
> @@ -778,9 +797,9 @@ static int live_nopreempt(void *arg)
>   			goto err_wedged;
>   		}
>   
> -		rq_b = igt_spinner_create_request(&b.spin,
> -						  b.ctx, engine,
> -						  MI_ARB_CHECK);
> +		rq_b = spinner_create_request(&b.spin,
> +					      b.ctx, engine,
> +					      MI_ARB_CHECK);
>   		if (IS_ERR(rq_b)) {
>   			err = PTR_ERR(rq_b);
>   			goto err_client_b;
> @@ -880,9 +899,9 @@ static int live_suppress_self_preempt(void *arg)
>   
>   		engine->execlists.preempt_hang.count = 0;
>   
> -		rq_a = igt_spinner_create_request(&a.spin,
> -						  a.ctx, engine,
> -						  MI_NOOP);
> +		rq_a = spinner_create_request(&a.spin,
> +					      a.ctx, engine,
> +					      MI_NOOP);
>   		if (IS_ERR(rq_a)) {
>   			err = PTR_ERR(rq_a);
>   			goto err_client_b;
> @@ -895,9 +914,9 @@ static int live_suppress_self_preempt(void *arg)
>   		}
>   
>   		for (depth = 0; depth < 8; depth++) {
> -			rq_b = igt_spinner_create_request(&b.spin,
> -							  b.ctx, engine,
> -							  MI_NOOP);
> +			rq_b = spinner_create_request(&b.spin,
> +						      b.ctx, engine,
> +						      MI_NOOP);
>   			if (IS_ERR(rq_b)) {
>   				err = PTR_ERR(rq_b);
>   				goto err_client_b;
> @@ -1048,9 +1067,9 @@ static int live_suppress_wait_preempt(void *arg)
>   				goto err_client_3;
>   
>   			for (i = 0; i < ARRAY_SIZE(client); i++) {
> -				rq[i] = igt_spinner_create_request(&client[i].spin,
> -								   client[i].ctx, engine,
> -								   MI_NOOP);
> +				rq[i] = spinner_create_request(&client[i].spin,
> +							       client[i].ctx, engine,
> +							       MI_NOOP);
>   				if (IS_ERR(rq[i])) {
>   					err = PTR_ERR(rq[i]);
>   					goto err_wedged;
> @@ -1157,9 +1176,9 @@ static int live_chain_preempt(void *arg)
>   		if (!intel_engine_has_preemption(engine))
>   			continue;
>   
> -		rq = igt_spinner_create_request(&lo.spin,
> -						lo.ctx, engine,
> -						MI_ARB_CHECK);
> +		rq = spinner_create_request(&lo.spin,
> +					    lo.ctx, engine,
> +					    MI_ARB_CHECK);
>   		if (IS_ERR(rq))
>   			goto err_wedged;
>   		i915_request_add(rq);
> @@ -1183,18 +1202,18 @@ static int live_chain_preempt(void *arg)
>   		}
>   
>   		for_each_prime_number_from(count, 1, ring_size) {
> -			rq = igt_spinner_create_request(&hi.spin,
> -							hi.ctx, engine,
> -							MI_ARB_CHECK);
> +			rq = spinner_create_request(&hi.spin,
> +						    hi.ctx, engine,
> +						    MI_ARB_CHECK);
>   			if (IS_ERR(rq))
>   				goto err_wedged;
>   			i915_request_add(rq);
>   			if (!igt_wait_for_spinner(&hi.spin, rq))
>   				goto err_wedged;
>   
> -			rq = igt_spinner_create_request(&lo.spin,
> -							lo.ctx, engine,
> -							MI_ARB_CHECK);
> +			rq = spinner_create_request(&lo.spin,
> +						    lo.ctx, engine,
> +						    MI_ARB_CHECK);
>   			if (IS_ERR(rq))
>   				goto err_wedged;
>   			i915_request_add(rq);
> @@ -1284,10 +1303,10 @@ static int live_preempt_hang(void *arg)
>   	mutex_lock(&i915->drm.struct_mutex);
>   	wakeref = intel_runtime_pm_get(&i915->runtime_pm);
>   
> -	if (igt_spinner_init(&spin_hi, i915))
> +	if (igt_spinner_init(&spin_hi, &i915->gt))
>   		goto err_unlock;
>   
> -	if (igt_spinner_init(&spin_lo, i915))
> +	if (igt_spinner_init(&spin_lo, &i915->gt))
>   		goto err_spin_hi;
>   
>   	ctx_hi = kernel_context(i915);
> @@ -1308,8 +1327,8 @@ static int live_preempt_hang(void *arg)
>   		if (!intel_engine_has_preemption(engine))
>   			continue;
>   
> -		rq = igt_spinner_create_request(&spin_lo, ctx_lo, engine,
> -						MI_ARB_CHECK);
> +		rq = spinner_create_request(&spin_lo, ctx_lo, engine,
> +					    MI_ARB_CHECK);
>   		if (IS_ERR(rq)) {
>   			err = PTR_ERR(rq);
>   			goto err_ctx_lo;
> @@ -1324,8 +1343,8 @@ static int live_preempt_hang(void *arg)
>   			goto err_ctx_lo;
>   		}
>   
> -		rq = igt_spinner_create_request(&spin_hi, ctx_hi, engine,
> -						MI_ARB_CHECK);
> +		rq = spinner_create_request(&spin_hi, ctx_hi, engine,
> +					    MI_ARB_CHECK);
>   		if (IS_ERR(rq)) {
>   			igt_spinner_end(&spin_lo);
>   			err = PTR_ERR(rq);
> diff --git a/drivers/gpu/drm/i915/gt/selftest_workarounds.c b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> index ab147985fa74..997da94821d9 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_workarounds.c
> @@ -238,6 +238,7 @@ switch_to_scratch_context(struct intel_engine_cs *engine,
>   			  struct igt_spinner *spin)
>   {
>   	struct i915_gem_context *ctx;
> +	struct intel_context *ce;
>   	struct i915_request *rq;
>   	intel_wakeref_t wakeref;
>   	int err = 0;
> @@ -248,10 +249,14 @@ switch_to_scratch_context(struct intel_engine_cs *engine,
>   
>   	GEM_BUG_ON(i915_gem_context_is_bannable(ctx));
>   
> +	ce = i915_gem_context_get_engine(ctx, engine->id);
> +	GEM_BUG_ON(IS_ERR(ce));
> +
>   	rq = ERR_PTR(-ENODEV);
>   	with_intel_runtime_pm(&engine->i915->runtime_pm, wakeref)
> -		rq = igt_spinner_create_request(spin, ctx, engine, MI_NOOP);
> +		rq = igt_spinner_create_request(spin, ce, MI_NOOP);
>   
> +	intel_context_put(ce);
>   	kernel_context_close(ctx);
>   
>   	if (IS_ERR(rq)) {
> @@ -291,7 +296,7 @@ static int check_whitelist_across_reset(struct intel_engine_cs *engine,
>   	if (IS_ERR(ctx))
>   		return PTR_ERR(ctx);
>   
> -	err = igt_spinner_init(&spin, i915);
> +	err = igt_spinner_init(&spin, engine->gt);
>   	if (err)
>   		goto out_ctx;
>   
> @@ -1083,7 +1088,7 @@ verify_wa_lists(struct i915_gem_context *ctx, struct wa_lists *lists,
>   
>   	ok &= wa_list_verify(&i915->uncore, &lists->gt_wa_list, str);
>   
> -	for_each_gem_engine(ce, i915_gem_context_lock_engines(ctx), it) {
> +	for_each_gem_engine(ce, i915_gem_context_engines(ctx), it) {
>   		enum intel_engine_id id = ce->engine->id;
>   
>   		ok &= engine_wa_list_verify(ce,
> @@ -1094,7 +1099,6 @@ verify_wa_lists(struct i915_gem_context *ctx, struct wa_lists *lists,
>   					    &lists->engine[id].ctx_wa_list,
>   					    str) == 0;
>   	}
> -	i915_gem_context_unlock_engines(ctx);
>   
>   	return ok;
>   }
> @@ -1115,6 +1119,8 @@ live_gpu_reset_workarounds(void *arg)
>   	if (IS_ERR(ctx))
>   		return PTR_ERR(ctx);
>   
> +	i915_gem_context_lock_engines(ctx);
> +
>   	pr_info("Verifying after GPU reset...\n");
>   
>   	igt_global_reset_lock(&i915->gt);
> @@ -1131,6 +1137,7 @@ live_gpu_reset_workarounds(void *arg)
>   	ok = verify_wa_lists(ctx, &lists, "after reset");
>   
>   out:
> +	i915_gem_context_unlock_engines(ctx);
>   	kernel_context_close(ctx);
>   	reference_lists_fini(i915, &lists);
>   	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
> @@ -1143,10 +1150,10 @@ static int
>   live_engine_reset_workarounds(void *arg)
>   {
>   	struct drm_i915_private *i915 = arg;
> -	struct intel_engine_cs *engine;
> +	struct i915_gem_engines_iter it;
>   	struct i915_gem_context *ctx;
> +	struct intel_context *ce;
>   	struct igt_spinner spin;
> -	enum intel_engine_id id;
>   	struct i915_request *rq;
>   	intel_wakeref_t wakeref;
>   	struct wa_lists lists;
> @@ -1164,7 +1171,8 @@ live_engine_reset_workarounds(void *arg)
>   
>   	reference_lists_init(i915, &lists);
>   
> -	for_each_engine(engine, i915, id) {
> +	for_each_gem_engine(ce, i915_gem_context_lock_engines(ctx), it) {
> +		struct intel_engine_cs *engine = ce->engine;
>   		bool ok;
>   
>   		pr_info("Verifying after %s reset...\n", engine->name);
> @@ -1183,11 +1191,11 @@ live_engine_reset_workarounds(void *arg)
>   			goto err;
>   		}
>   
> -		ret = igt_spinner_init(&spin, i915);
> +		ret = igt_spinner_init(&spin, engine->gt);
>   		if (ret)
>   			goto err;
>   
> -		rq = igt_spinner_create_request(&spin, ctx, engine, MI_NOOP);
> +		rq = igt_spinner_create_request(&spin, ce, MI_NOOP);
>   		if (IS_ERR(rq)) {
>   			ret = PTR_ERR(rq);
>   			igt_spinner_fini(&spin);
> @@ -1214,8 +1222,8 @@ live_engine_reset_workarounds(void *arg)
>   			goto err;
>   		}
>   	}
> -
>   err:
> +	i915_gem_context_unlock_engines(ctx);
>   	reference_lists_fini(i915, &lists);
>   	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
>   	igt_global_reset_unlock(&i915->gt);
> diff --git a/drivers/gpu/drm/i915/selftests/igt_spinner.c b/drivers/gpu/drm/i915/selftests/igt_spinner.c
> index 89b6552a6497..41acf209ffdb 100644
> --- a/drivers/gpu/drm/i915/selftests/igt_spinner.c
> +++ b/drivers/gpu/drm/i915/selftests/igt_spinner.c
> @@ -9,25 +9,24 @@
>   
>   #include "igt_spinner.h"
>   
> -int igt_spinner_init(struct igt_spinner *spin, struct drm_i915_private *i915)
> +int igt_spinner_init(struct igt_spinner *spin, struct intel_gt *gt)
>   {
>   	unsigned int mode;
>   	void *vaddr;
>   	int err;
>   
> -	GEM_BUG_ON(INTEL_GEN(i915) < 8);
> +	GEM_BUG_ON(INTEL_GEN(gt->i915) < 8);
>   
>   	memset(spin, 0, sizeof(*spin));
> -	spin->i915 = i915;
> -	spin->gt = &i915->gt;
> +	spin->gt = gt;
>   
> -	spin->hws = i915_gem_object_create_internal(i915, PAGE_SIZE);
> +	spin->hws = i915_gem_object_create_internal(gt->i915, PAGE_SIZE);
>   	if (IS_ERR(spin->hws)) {
>   		err = PTR_ERR(spin->hws);
>   		goto err;
>   	}
>   
> -	spin->obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
> +	spin->obj = i915_gem_object_create_internal(gt->i915, PAGE_SIZE);
>   	if (IS_ERR(spin->obj)) {
>   		err = PTR_ERR(spin->obj);
>   		goto err_hws;
> @@ -41,7 +40,7 @@ int igt_spinner_init(struct igt_spinner *spin, struct drm_i915_private *i915)
>   	}
>   	spin->seqno = memset(vaddr, 0xff, PAGE_SIZE);
>   
> -	mode = i915_coherent_map_type(i915);
> +	mode = i915_coherent_map_type(gt->i915);

I don't think multiple gt->i915 are buying us anything apart from a 
larger diff but okay.

>   	vaddr = i915_gem_object_pin_map(spin->obj, mode);
>   	if (IS_ERR(vaddr)) {
>   		err = PTR_ERR(vaddr);
> @@ -87,22 +86,22 @@ static int move_to_active(struct i915_vma *vma,
>   
>   struct i915_request *
>   igt_spinner_create_request(struct igt_spinner *spin,
> -			   struct i915_gem_context *ctx,
> -			   struct intel_engine_cs *engine,
> +			   struct intel_context *ce,
>   			   u32 arbitration_command)
>   {
> +	struct intel_engine_cs *engine = ce->engine;
>   	struct i915_request *rq = NULL;
>   	struct i915_vma *hws, *vma;
>   	u32 *batch;
>   	int err;
>   
> -	spin->gt = engine->gt;
> +	GEM_BUG_ON(spin->gt != ce->vm->gt);
>   
> -	vma = i915_vma_instance(spin->obj, ctx->vm, NULL);
> +	vma = i915_vma_instance(spin->obj, ce->vm, NULL);
>   	if (IS_ERR(vma))
>   		return ERR_CAST(vma);
>   
> -	hws = i915_vma_instance(spin->hws, ctx->vm, NULL);
> +	hws = i915_vma_instance(spin->hws, ce->vm, NULL);
>   	if (IS_ERR(hws))
>   		return ERR_CAST(hws);
>   
> @@ -114,7 +113,7 @@ igt_spinner_create_request(struct igt_spinner *spin,
>   	if (err)
>   		goto unpin_vma;
>   
> -	rq = igt_request_alloc(ctx, engine);
> +	rq = intel_context_create_request(ce);
>   	if (IS_ERR(rq)) {
>   		err = PTR_ERR(rq);
>   		goto unpin_hws;
> diff --git a/drivers/gpu/drm/i915/selftests/igt_spinner.h b/drivers/gpu/drm/i915/selftests/igt_spinner.h
> index 1bfc39efa773..ec62c9ef320b 100644
> --- a/drivers/gpu/drm/i915/selftests/igt_spinner.h
> +++ b/drivers/gpu/drm/i915/selftests/igt_spinner.h
> @@ -17,7 +17,6 @@
>   struct intel_gt;
>   
>   struct igt_spinner {
> -	struct drm_i915_private *i915;
>   	struct intel_gt *gt;
>   	struct drm_i915_gem_object *hws;
>   	struct drm_i915_gem_object *obj;
> @@ -25,13 +24,12 @@ struct igt_spinner {
>   	void *seqno;
>   };
>   
> -int igt_spinner_init(struct igt_spinner *spin, struct drm_i915_private *i915);
> +int igt_spinner_init(struct igt_spinner *spin, struct intel_gt *gt);
>   void igt_spinner_fini(struct igt_spinner *spin);
>   
>   struct i915_request *
>   igt_spinner_create_request(struct igt_spinner *spin,
> -			   struct i915_gem_context *ctx,
> -			   struct intel_engine_cs *engine,
> +			   struct intel_context *ce,
>   			   u32 arbitration_command);
>   void igt_spinner_end(struct igt_spinner *spin);
>   
> 

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko


More information about the Intel-gfx mailing list