[v2] drm/i915/selftests: Teach execlists to take intel_gt as its argument
diff mbox series

Message ID 20191016120249.22714-1-chris@chris-wilson.co.uk
State New
Headers show
Series
  • [v2] drm/i915/selftests: Teach execlists to take intel_gt as its argument
Related show

Commit Message

Chris Wilson Oct. 16, 2019, 12:02 p.m. UTC
The execlists selftests are hardware centric and so want to use the gt
as its target.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 drivers/gpu/drm/i915/gt/selftest_lrc.c | 290 ++++++++++++-------------
 1 file changed, 143 insertions(+), 147 deletions(-)

Comments

Tvrtko Ursulin Oct. 16, 2019, 12:50 p.m. UTC | #1
On 16/10/2019 13:02, Chris Wilson wrote:
> The execlists selftests are hardware centric and so want to use the gt
> as its target.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> ---
>   drivers/gpu/drm/i915/gt/selftest_lrc.c | 290 ++++++++++++-------------
>   1 file changed, 143 insertions(+), 147 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c
> index 9c1f34fb5882..2868371c609e 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c
> @@ -51,20 +51,20 @@ static struct i915_vma *create_scratch(struct intel_gt *gt)
>   
>   static int live_sanitycheck(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct i915_gem_engines_iter it;
>   	struct i915_gem_context *ctx;
>   	struct intel_context *ce;
>   	struct igt_spinner spin;
>   	int err = -ENOMEM;
>   
> -	if (!HAS_LOGICAL_RING_CONTEXTS(i915))
> +	if (!HAS_LOGICAL_RING_CONTEXTS(gt->i915))
>   		return 0;
>   
> -	if (igt_spinner_init(&spin, &i915->gt))
> +	if (igt_spinner_init(&spin, gt))
>   		return -ENOMEM;
>   
> -	ctx = kernel_context(i915);
> +	ctx = kernel_context(gt->i915);
>   	if (!ctx)
>   		goto err_spin;
>   
> @@ -81,13 +81,13 @@ static int live_sanitycheck(void *arg)
>   		if (!igt_wait_for_spinner(&spin, rq)) {
>   			GEM_TRACE("spinner failed to start\n");
>   			GEM_TRACE_DUMP();
> -			intel_gt_set_wedged(&i915->gt);
> +			intel_gt_set_wedged(gt);
>   			err = -EIO;
>   			goto err_ctx;
>   		}
>   
>   		igt_spinner_end(&spin);
> -		if (igt_flush_test(i915)) {
> +		if (igt_flush_test(gt->i915)) {
>   			err = -EIO;
>   			goto err_ctx;
>   		}
> @@ -102,7 +102,7 @@ static int live_sanitycheck(void *arg)
>   	return err;
>   }
>   
> -static int live_unlite_restore(struct drm_i915_private *i915, int prio)
> +static int live_unlite_restore(struct intel_gt *gt, int prio)
>   {
>   	struct intel_engine_cs *engine;
>   	struct i915_gem_context *ctx;
> @@ -115,15 +115,15 @@ static int live_unlite_restore(struct drm_i915_private *i915, int prio)
>   	 * on the same engine from the same parent context.
>   	 */
>   
> -	if (igt_spinner_init(&spin, &i915->gt))
> +	if (igt_spinner_init(&spin, gt))
>   		return err;
>   
> -	ctx = kernel_context(i915);
> +	ctx = kernel_context(gt->i915);
>   	if (!ctx)
>   		goto err_spin;
>   
>   	err = 0;
> -	for_each_engine(engine, i915, id) {
> +	for_each_engine(engine, gt->i915, id) {

^^^

>   		struct intel_context *ce[2] = {};
>   		struct i915_request *rq[2];
>   		struct igt_live_test t;
> @@ -135,7 +135,7 @@ static int live_unlite_restore(struct drm_i915_private *i915, int prio)
>   		if (!intel_engine_can_store_dword(engine))
>   			continue;
>   
> -		if (igt_live_test_begin(&t, i915, __func__, engine->name)) {
> +		if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) {
>   			err = -EIO;
>   			break;
>   		}
> @@ -416,7 +416,7 @@ slice_semaphore_queue(struct intel_engine_cs *outer,
>   
>   static int live_timeslice_preempt(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct drm_i915_gem_object *obj;
>   	struct i915_vma *vma;
>   	void *vaddr;
> @@ -432,11 +432,11 @@ static int live_timeslice_preempt(void *arg)
>   	 * ready task.
>   	 */
>   
> -	obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
> +	obj = i915_gem_object_create_internal(gt->i915, PAGE_SIZE);
>   	if (IS_ERR(obj))
>   		return PTR_ERR(obj);
>   
> -	vma = i915_vma_instance(obj, &i915->ggtt.vm, NULL);
> +	vma = i915_vma_instance(obj, &gt->ggtt->vm, NULL);
>   	if (IS_ERR(vma)) {
>   		err = PTR_ERR(vma);
>   		goto err_obj;
> @@ -456,7 +456,7 @@ static int live_timeslice_preempt(void *arg)
>   		struct intel_engine_cs *engine;
>   		enum intel_engine_id id;
>   
> -		for_each_engine(engine, i915, id) {
> +		for_each_engine(engine, gt->i915, id) {

^^^

>   			if (!intel_engine_has_preemption(engine))
>   				continue;
>   
> @@ -466,7 +466,7 @@ static int live_timeslice_preempt(void *arg)
>   			if (err)
>   				goto err_pin;
>   
> -			if (igt_flush_test(i915)) {
> +			if (igt_flush_test(gt->i915)) {
>   				err = -EIO;
>   				goto err_pin;
>   			}
> @@ -484,7 +484,7 @@ static int live_timeslice_preempt(void *arg)
>   
>   static int live_busywait_preempt(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct i915_gem_context *ctx_hi, *ctx_lo;
>   	struct intel_engine_cs *engine;
>   	struct drm_i915_gem_object *obj;
> @@ -498,19 +498,19 @@ static int live_busywait_preempt(void *arg)
>   	 * preempt the busywaits used to synchronise between rings.
>   	 */
>   
> -	ctx_hi = kernel_context(i915);
> +	ctx_hi = kernel_context(gt->i915);
>   	if (!ctx_hi)
>   		return -ENOMEM;
>   	ctx_hi->sched.priority =
>   		I915_USER_PRIORITY(I915_CONTEXT_MAX_USER_PRIORITY);
>   
> -	ctx_lo = kernel_context(i915);
> +	ctx_lo = kernel_context(gt->i915);
>   	if (!ctx_lo)
>   		goto err_ctx_hi;
>   	ctx_lo->sched.priority =
>   		I915_USER_PRIORITY(I915_CONTEXT_MIN_USER_PRIORITY);
>   
> -	obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
> +	obj = i915_gem_object_create_internal(gt->i915, PAGE_SIZE);
>   	if (IS_ERR(obj)) {
>   		err = PTR_ERR(obj);
>   		goto err_ctx_lo;
> @@ -522,7 +522,7 @@ static int live_busywait_preempt(void *arg)
>   		goto err_obj;
>   	}
>   
> -	vma = i915_vma_instance(obj, &i915->ggtt.vm, NULL);
> +	vma = i915_vma_instance(obj, &gt->ggtt->vm, NULL);
>   	if (IS_ERR(vma)) {
>   		err = PTR_ERR(vma);
>   		goto err_map;
> @@ -532,7 +532,7 @@ static int live_busywait_preempt(void *arg)
>   	if (err)
>   		goto err_map;
>   
> -	for_each_engine(engine, i915, id) {
> +	for_each_engine(engine, gt->i915, id) {

^^^

>   		struct i915_request *lo, *hi;
>   		struct igt_live_test t;
>   		u32 *cs;
> @@ -543,7 +543,7 @@ static int live_busywait_preempt(void *arg)
>   		if (!intel_engine_can_store_dword(engine))
>   			continue;
>   
> -		if (igt_live_test_begin(&t, i915, __func__, engine->name)) {
> +		if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) {
>   			err = -EIO;
>   			goto err_vma;
>   		}
> @@ -623,7 +623,7 @@ static int live_busywait_preempt(void *arg)
>   		i915_request_add(hi);
>   
>   		if (i915_request_wait(lo, 0, HZ / 5) < 0) {
> -			struct drm_printer p = drm_info_printer(i915->drm.dev);
> +			struct drm_printer p = drm_info_printer(gt->i915->drm.dev);
>   
>   			pr_err("%s: Failed to preempt semaphore busywait!\n",
>   			       engine->name);
> @@ -631,7 +631,7 @@ static int live_busywait_preempt(void *arg)
>   			intel_engine_dump(engine, &p, "%s\n", engine->name);
>   			GEM_TRACE_DUMP();
>   
> -			intel_gt_set_wedged(&i915->gt);
> +			intel_gt_set_wedged(gt);
>   			err = -EIO;
>   			goto err_vma;
>   		}
> @@ -677,45 +677,45 @@ spinner_create_request(struct igt_spinner *spin,
>   
>   static int live_preempt(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct i915_gem_context *ctx_hi, *ctx_lo;
>   	struct igt_spinner spin_hi, spin_lo;
>   	struct intel_engine_cs *engine;
>   	enum intel_engine_id id;
>   	int err = -ENOMEM;
>   
> -	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
> +	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
>   		return 0;
>   
> -	if (!(i915->caps.scheduler & I915_SCHEDULER_CAP_PREEMPTION))
> +	if (!(gt->i915->caps.scheduler & I915_SCHEDULER_CAP_PREEMPTION))
>   		pr_err("Logical preemption supported, but not exposed\n");
>   
> -	if (igt_spinner_init(&spin_hi, &i915->gt))
> +	if (igt_spinner_init(&spin_hi, gt))
>   		return -ENOMEM;
>   
> -	if (igt_spinner_init(&spin_lo, &i915->gt))
> +	if (igt_spinner_init(&spin_lo, gt))
>   		goto err_spin_hi;
>   
> -	ctx_hi = kernel_context(i915);
> +	ctx_hi = kernel_context(gt->i915);
>   	if (!ctx_hi)
>   		goto err_spin_lo;
>   	ctx_hi->sched.priority =
>   		I915_USER_PRIORITY(I915_CONTEXT_MAX_USER_PRIORITY);
>   
> -	ctx_lo = kernel_context(i915);
> +	ctx_lo = kernel_context(gt->i915);
>   	if (!ctx_lo)
>   		goto err_ctx_hi;
>   	ctx_lo->sched.priority =
>   		I915_USER_PRIORITY(I915_CONTEXT_MIN_USER_PRIORITY);
>   
> -	for_each_engine(engine, i915, id) {
> +	for_each_engine(engine, gt->i915, id) {

^^^

Also, i915 local in this function might make sense if you feel like it.

>   		struct igt_live_test t;
>   		struct i915_request *rq;
>   
>   		if (!intel_engine_has_preemption(engine))
>   			continue;
>   
> -		if (igt_live_test_begin(&t, i915, __func__, engine->name)) {
> +		if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) {
>   			err = -EIO;
>   			goto err_ctx_lo;
>   		}
> @@ -731,7 +731,7 @@ static int live_preempt(void *arg)
>   		if (!igt_wait_for_spinner(&spin_lo, rq)) {
>   			GEM_TRACE("lo spinner failed to start\n");
>   			GEM_TRACE_DUMP();
> -			intel_gt_set_wedged(&i915->gt);
> +			intel_gt_set_wedged(gt);
>   			err = -EIO;
>   			goto err_ctx_lo;
>   		}
> @@ -748,7 +748,7 @@ static int live_preempt(void *arg)
>   		if (!igt_wait_for_spinner(&spin_hi, rq)) {
>   			GEM_TRACE("hi spinner failed to start\n");
>   			GEM_TRACE_DUMP();
> -			intel_gt_set_wedged(&i915->gt);
> +			intel_gt_set_wedged(gt);
>   			err = -EIO;
>   			goto err_ctx_lo;
>   		}
> @@ -776,7 +776,7 @@ static int live_preempt(void *arg)
>   
>   static int live_late_preempt(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct i915_gem_context *ctx_hi, *ctx_lo;
>   	struct igt_spinner spin_hi, spin_lo;
>   	struct intel_engine_cs *engine;
> @@ -784,34 +784,34 @@ static int live_late_preempt(void *arg)
>   	enum intel_engine_id id;
>   	int err = -ENOMEM;
>   
> -	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
> +	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
>   		return 0;
>   
> -	if (igt_spinner_init(&spin_hi, &i915->gt))
> +	if (igt_spinner_init(&spin_hi, gt))
>   		return -ENOMEM;
>   
> -	if (igt_spinner_init(&spin_lo, &i915->gt))
> +	if (igt_spinner_init(&spin_lo, gt))
>   		goto err_spin_hi;
>   
> -	ctx_hi = kernel_context(i915);
> +	ctx_hi = kernel_context(gt->i915);
>   	if (!ctx_hi)
>   		goto err_spin_lo;
>   
> -	ctx_lo = kernel_context(i915);
> +	ctx_lo = kernel_context(gt->i915);
>   	if (!ctx_lo)
>   		goto err_ctx_hi;
>   
>   	/* Make sure ctx_lo stays before ctx_hi until we trigger preemption. */
>   	ctx_lo->sched.priority = I915_USER_PRIORITY(1);
>   
> -	for_each_engine(engine, i915, id) {
> +	for_each_engine(engine, gt->i915, id) {

^^^

>   		struct igt_live_test t;
>   		struct i915_request *rq;
>   
>   		if (!intel_engine_has_preemption(engine))
>   			continue;
>   
> -		if (igt_live_test_begin(&t, i915, __func__, engine->name)) {
> +		if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) {
>   			err = -EIO;
>   			goto err_ctx_lo;
>   		}
> @@ -875,7 +875,7 @@ static int live_late_preempt(void *arg)
>   err_wedged:
>   	igt_spinner_end(&spin_hi);
>   	igt_spinner_end(&spin_lo);
> -	intel_gt_set_wedged(&i915->gt);
> +	intel_gt_set_wedged(gt);
>   	err = -EIO;
>   	goto err_ctx_lo;
>   }
> @@ -885,14 +885,13 @@ struct preempt_client {
>   	struct i915_gem_context *ctx;
>   };
>   
> -static int preempt_client_init(struct drm_i915_private *i915,
> -			       struct preempt_client *c)
> +static int preempt_client_init(struct intel_gt *gt, struct preempt_client *c)
>   {
> -	c->ctx = kernel_context(i915);
> +	c->ctx = kernel_context(gt->i915);
>   	if (!c->ctx)
>   		return -ENOMEM;
>   
> -	if (igt_spinner_init(&c->spin, &i915->gt))
> +	if (igt_spinner_init(&c->spin, gt))
>   		goto err_ctx;
>   
>   	return 0;
> @@ -910,7 +909,7 @@ static void preempt_client_fini(struct preempt_client *c)
>   
>   static int live_nopreempt(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct intel_engine_cs *engine;
>   	struct preempt_client a, b;
>   	enum intel_engine_id id;
> @@ -921,16 +920,16 @@ static int live_nopreempt(void *arg)
>   	 * that may be being observed and not want to be interrupted.
>   	 */
>   
> -	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
> +	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
>   		return 0;
>   
> -	if (preempt_client_init(i915, &a))
> +	if (preempt_client_init(gt, &a))
>   		return -ENOMEM;
> -	if (preempt_client_init(i915, &b))
> +	if (preempt_client_init(gt, &b))
>   		goto err_client_a;
>   	b.ctx->sched.priority = I915_USER_PRIORITY(I915_PRIORITY_MAX);
>   
> -	for_each_engine(engine, i915, id) {
> +	for_each_engine(engine, gt->i915, id) {

^^^

>   		struct i915_request *rq_a, *rq_b;
>   
>   		if (!intel_engine_has_preemption(engine))
> @@ -990,7 +989,7 @@ static int live_nopreempt(void *arg)
>   			goto err_wedged;
>   		}
>   
> -		if (igt_flush_test(i915))
> +		if (igt_flush_test(gt->i915))
>   			goto err_wedged;
>   	}
>   
> @@ -1004,14 +1003,14 @@ static int live_nopreempt(void *arg)
>   err_wedged:
>   	igt_spinner_end(&b.spin);
>   	igt_spinner_end(&a.spin);
> -	intel_gt_set_wedged(&i915->gt);
> +	intel_gt_set_wedged(gt);
>   	err = -EIO;
>   	goto err_client_b;
>   }
>   
>   static int live_suppress_self_preempt(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct intel_engine_cs *engine;
>   	struct i915_sched_attr attr = {
>   		.priority = I915_USER_PRIORITY(I915_PRIORITY_MAX)
> @@ -1027,28 +1026,28 @@ static int live_suppress_self_preempt(void *arg)
>   	 * completion event.
>   	 */
>   
> -	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
> +	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
>   		return 0;
>   
> -	if (USES_GUC_SUBMISSION(i915))
> +	if (USES_GUC_SUBMISSION(gt->i915))
>   		return 0; /* presume black blox */
>   
> -	if (intel_vgpu_active(i915))
> +	if (intel_vgpu_active(gt->i915))
>   		return 0; /* GVT forces single port & request submission */
>   
> -	if (preempt_client_init(i915, &a))
> +	if (preempt_client_init(gt, &a))
>   		return -ENOMEM;
> -	if (preempt_client_init(i915, &b))
> +	if (preempt_client_init(gt, &b))
>   		goto err_client_a;
>   
> -	for_each_engine(engine, i915, id) {
> +	for_each_engine(engine, gt->i915, id) {

^^^

>   		struct i915_request *rq_a, *rq_b;
>   		int depth;
>   
>   		if (!intel_engine_has_preemption(engine))
>   			continue;
>   
> -		if (igt_flush_test(i915))
> +		if (igt_flush_test(gt->i915))
>   			goto err_wedged;
>   
>   		intel_engine_pm_get(engine);
> @@ -1109,7 +1108,7 @@ static int live_suppress_self_preempt(void *arg)
>   		}
>   
>   		intel_engine_pm_put(engine);
> -		if (igt_flush_test(i915))
> +		if (igt_flush_test(gt->i915))
>   			goto err_wedged;
>   	}
>   
> @@ -1123,7 +1122,7 @@ static int live_suppress_self_preempt(void *arg)
>   err_wedged:
>   	igt_spinner_end(&b.spin);
>   	igt_spinner_end(&a.spin);
> -	intel_gt_set_wedged(&i915->gt);
> +	intel_gt_set_wedged(gt);
>   	err = -EIO;
>   	goto err_client_b;
>   }
> @@ -1183,7 +1182,7 @@ static void dummy_request_free(struct i915_request *dummy)
>   
>   static int live_suppress_wait_preempt(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct preempt_client client[4];
>   	struct intel_engine_cs *engine;
>   	enum intel_engine_id id;
> @@ -1196,19 +1195,19 @@ static int live_suppress_wait_preempt(void *arg)
>   	 * not needlessly generate preempt-to-idle cycles.
>   	 */
>   
> -	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
> +	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
>   		return 0;
>   
> -	if (preempt_client_init(i915, &client[0])) /* ELSP[0] */
> +	if (preempt_client_init(gt, &client[0])) /* ELSP[0] */
>   		return -ENOMEM;
> -	if (preempt_client_init(i915, &client[1])) /* ELSP[1] */
> +	if (preempt_client_init(gt, &client[1])) /* ELSP[1] */
>   		goto err_client_0;
> -	if (preempt_client_init(i915, &client[2])) /* head of queue */
> +	if (preempt_client_init(gt, &client[2])) /* head of queue */
>   		goto err_client_1;
> -	if (preempt_client_init(i915, &client[3])) /* bystander */
> +	if (preempt_client_init(gt, &client[3])) /* bystander */
>   		goto err_client_2;
>   
> -	for_each_engine(engine, i915, id) {
> +	for_each_engine(engine, gt->i915, id) {

^^^

>   		int depth;
>   
>   		if (!intel_engine_has_preemption(engine))
> @@ -1263,7 +1262,7 @@ static int live_suppress_wait_preempt(void *arg)
>   			for (i = 0; i < ARRAY_SIZE(client); i++)
>   				igt_spinner_end(&client[i].spin);
>   
> -			if (igt_flush_test(i915))
> +			if (igt_flush_test(gt->i915))
>   				goto err_wedged;
>   
>   			if (engine->execlists.preempt_hang.count) {
> @@ -1291,14 +1290,14 @@ static int live_suppress_wait_preempt(void *arg)
>   err_wedged:
>   	for (i = 0; i < ARRAY_SIZE(client); i++)
>   		igt_spinner_end(&client[i].spin);
> -	intel_gt_set_wedged(&i915->gt);
> +	intel_gt_set_wedged(gt);
>   	err = -EIO;
>   	goto err_client_3;
>   }
>   
>   static int live_chain_preempt(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct intel_engine_cs *engine;
>   	struct preempt_client hi, lo;
>   	enum intel_engine_id id;
> @@ -1310,16 +1309,16 @@ static int live_chain_preempt(void *arg)
>   	 * the previously submitted spinner in B.
>   	 */
>   
> -	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
> +	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
>   		return 0;
>   
> -	if (preempt_client_init(i915, &hi))
> +	if (preempt_client_init(gt, &hi))
>   		return -ENOMEM;
>   
> -	if (preempt_client_init(i915, &lo))
> +	if (preempt_client_init(gt, &lo))
>   		goto err_client_hi;
>   
> -	for_each_engine(engine, i915, id) {
> +	for_each_engine(engine, gt->i915, id) {

^^^

>   		struct i915_sched_attr attr = {
>   			.priority = I915_USER_PRIORITY(I915_PRIORITY_MAX),
>   		};
> @@ -1350,7 +1349,7 @@ static int live_chain_preempt(void *arg)
>   			goto err_wedged;
>   		}
>   
> -		if (igt_live_test_begin(&t, i915, __func__, engine->name)) {
> +		if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) {
>   			err = -EIO;
>   			goto err_wedged;
>   		}
> @@ -1388,7 +1387,7 @@ static int live_chain_preempt(void *arg)
>   			igt_spinner_end(&hi.spin);
>   			if (i915_request_wait(rq, 0, HZ / 5) < 0) {
>   				struct drm_printer p =
> -					drm_info_printer(i915->drm.dev);
> +					drm_info_printer(gt->i915->drm.dev);
>   
>   				pr_err("Failed to preempt over chain of %d\n",
>   				       count);
> @@ -1404,7 +1403,7 @@ static int live_chain_preempt(void *arg)
>   			i915_request_add(rq);
>   			if (i915_request_wait(rq, 0, HZ / 5) < 0) {
>   				struct drm_printer p =
> -					drm_info_printer(i915->drm.dev);
> +					drm_info_printer(gt->i915->drm.dev);
>   
>   				pr_err("Failed to flush low priority chain of %d requests\n",
>   				       count);
> @@ -1430,45 +1429,45 @@ static int live_chain_preempt(void *arg)
>   err_wedged:
>   	igt_spinner_end(&hi.spin);
>   	igt_spinner_end(&lo.spin);
> -	intel_gt_set_wedged(&i915->gt);
> +	intel_gt_set_wedged(gt);
>   	err = -EIO;
>   	goto err_client_lo;
>   }
>   
>   static int live_preempt_hang(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct i915_gem_context *ctx_hi, *ctx_lo;
>   	struct igt_spinner spin_hi, spin_lo;
>   	struct intel_engine_cs *engine;
>   	enum intel_engine_id id;
>   	int err = -ENOMEM;
>   
> -	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
> +	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
>   		return 0;
>   
> -	if (!intel_has_reset_engine(&i915->gt))
> +	if (!intel_has_reset_engine(gt))
>   		return 0;
>   
> -	if (igt_spinner_init(&spin_hi, &i915->gt))
> +	if (igt_spinner_init(&spin_hi, gt))
>   		return -ENOMEM;
>   
> -	if (igt_spinner_init(&spin_lo, &i915->gt))
> +	if (igt_spinner_init(&spin_lo, gt))
>   		goto err_spin_hi;
>   
> -	ctx_hi = kernel_context(i915);
> +	ctx_hi = kernel_context(gt->i915);
>   	if (!ctx_hi)
>   		goto err_spin_lo;
>   	ctx_hi->sched.priority =
>   		I915_USER_PRIORITY(I915_CONTEXT_MAX_USER_PRIORITY);
>   
> -	ctx_lo = kernel_context(i915);
> +	ctx_lo = kernel_context(gt->i915);
>   	if (!ctx_lo)
>   		goto err_ctx_hi;
>   	ctx_lo->sched.priority =
>   		I915_USER_PRIORITY(I915_CONTEXT_MIN_USER_PRIORITY);
>   
> -	for_each_engine(engine, i915, id) {
> +	for_each_engine(engine, gt->i915, id) {

^^^

>   		struct i915_request *rq;
>   
>   		if (!intel_engine_has_preemption(engine))
> @@ -1485,7 +1484,7 @@ static int live_preempt_hang(void *arg)
>   		if (!igt_wait_for_spinner(&spin_lo, rq)) {
>   			GEM_TRACE("lo spinner failed to start\n");
>   			GEM_TRACE_DUMP();
> -			intel_gt_set_wedged(&i915->gt);
> +			intel_gt_set_wedged(gt);
>   			err = -EIO;
>   			goto err_ctx_lo;
>   		}
> @@ -1507,28 +1506,28 @@ static int live_preempt_hang(void *arg)
>   						 HZ / 10)) {
>   			pr_err("Preemption did not occur within timeout!");
>   			GEM_TRACE_DUMP();
> -			intel_gt_set_wedged(&i915->gt);
> +			intel_gt_set_wedged(gt);
>   			err = -EIO;
>   			goto err_ctx_lo;
>   		}
>   
> -		set_bit(I915_RESET_ENGINE + id, &i915->gt.reset.flags);
> +		set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
>   		intel_engine_reset(engine, NULL);
> -		clear_bit(I915_RESET_ENGINE + id, &i915->gt.reset.flags);
> +		clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
>   
>   		engine->execlists.preempt_hang.inject_hang = false;
>   
>   		if (!igt_wait_for_spinner(&spin_hi, rq)) {
>   			GEM_TRACE("hi spinner failed to start\n");
>   			GEM_TRACE_DUMP();
> -			intel_gt_set_wedged(&i915->gt);
> +			intel_gt_set_wedged(gt);
>   			err = -EIO;
>   			goto err_ctx_lo;
>   		}
>   
>   		igt_spinner_end(&spin_hi);
>   		igt_spinner_end(&spin_lo);
> -		if (igt_flush_test(i915)) {
> +		if (igt_flush_test(gt->i915)) {
>   			err = -EIO;
>   			goto err_ctx_lo;
>   		}
> @@ -1557,7 +1556,7 @@ static int random_priority(struct rnd_state *rnd)
>   }
>   
>   struct preempt_smoke {
> -	struct drm_i915_private *i915;
> +	struct intel_gt *gt;
>   	struct i915_gem_context **contexts;
>   	struct intel_engine_cs *engine;
>   	struct drm_i915_gem_object *batch;
> @@ -1657,7 +1656,7 @@ static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)
>   	unsigned long count;
>   	int err = 0;
>   
> -	for_each_engine(engine, smoke->i915, id) {
> +	for_each_engine(engine, smoke->gt->i915, id) {

^^^

>   		arg[id] = *smoke;
>   		arg[id].engine = engine;
>   		if (!(flags & BATCH))
> @@ -1674,7 +1673,7 @@ static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)
>   	}
>   
>   	count = 0;
> -	for_each_engine(engine, smoke->i915, id) {
> +	for_each_engine(engine, smoke->gt->i915, id) {

^^^

>   		int status;
>   
>   		if (IS_ERR_OR_NULL(tsk[id]))
> @@ -1691,7 +1690,7 @@ static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)
>   
>   	pr_info("Submitted %lu crescendo:%x requests across %d engines and %d contexts\n",
>   		count, flags,
> -		RUNTIME_INFO(smoke->i915)->num_engines, smoke->ncontext);
> +		RUNTIME_INFO(smoke->gt->i915)->num_engines, smoke->ncontext);
>   	return 0;
>   }
>   
> @@ -1703,7 +1702,7 @@ static int smoke_random(struct preempt_smoke *smoke, unsigned int flags)
>   
>   	count = 0;
>   	do {
> -		for_each_engine(smoke->engine, smoke->i915, id) {
> +		for_each_engine(smoke->engine, smoke->gt->i915, id) {

^^^

>   			struct i915_gem_context *ctx = smoke_context(smoke);
>   			int err;
>   
> @@ -1719,14 +1718,14 @@ static int smoke_random(struct preempt_smoke *smoke, unsigned int flags)
>   
>   	pr_info("Submitted %lu random:%x requests across %d engines and %d contexts\n",
>   		count, flags,
> -		RUNTIME_INFO(smoke->i915)->num_engines, smoke->ncontext);
> +		RUNTIME_INFO(smoke->gt->i915)->num_engines, smoke->ncontext);
>   	return 0;
>   }
>   
>   static int live_preempt_smoke(void *arg)
>   {
>   	struct preempt_smoke smoke = {
> -		.i915 = arg,
> +		.gt = arg,
>   		.prng = I915_RND_STATE_INITIALIZER(i915_selftest.random_seed),
>   		.ncontext = 1024,
>   	};
> @@ -1736,7 +1735,7 @@ static int live_preempt_smoke(void *arg)
>   	u32 *cs;
>   	int n;
>   
> -	if (!HAS_LOGICAL_RING_PREEMPTION(smoke.i915))
> +	if (!HAS_LOGICAL_RING_PREEMPTION(smoke.gt->i915))
>   		return 0;
>   
>   	smoke.contexts = kmalloc_array(smoke.ncontext,
> @@ -1745,7 +1744,8 @@ static int live_preempt_smoke(void *arg)
>   	if (!smoke.contexts)
>   		return -ENOMEM;
>   
> -	smoke.batch = i915_gem_object_create_internal(smoke.i915, PAGE_SIZE);
> +	smoke.batch =
> +		i915_gem_object_create_internal(smoke.gt->i915, PAGE_SIZE);
>   	if (IS_ERR(smoke.batch)) {
>   		err = PTR_ERR(smoke.batch);
>   		goto err_free;
> @@ -1762,13 +1762,13 @@ static int live_preempt_smoke(void *arg)
>   	i915_gem_object_flush_map(smoke.batch);
>   	i915_gem_object_unpin_map(smoke.batch);
>   
> -	if (igt_live_test_begin(&t, smoke.i915, __func__, "all")) {
> +	if (igt_live_test_begin(&t, smoke.gt->i915, __func__, "all")) {
>   		err = -EIO;
>   		goto err_batch;
>   	}
>   
>   	for (n = 0; n < smoke.ncontext; n++) {
> -		smoke.contexts[n] = kernel_context(smoke.i915);
> +		smoke.contexts[n] = kernel_context(smoke.gt->i915);
>   		if (!smoke.contexts[n])
>   			goto err_ctx;
>   	}
> @@ -1801,7 +1801,7 @@ static int live_preempt_smoke(void *arg)
>   	return err;
>   }
>   
> -static int nop_virtual_engine(struct drm_i915_private *i915,
> +static int nop_virtual_engine(struct intel_gt *gt,
>   			      struct intel_engine_cs **siblings,
>   			      unsigned int nsibling,
>   			      unsigned int nctx,
> @@ -1820,7 +1820,7 @@ static int nop_virtual_engine(struct drm_i915_private *i915,
>   	GEM_BUG_ON(!nctx || nctx > ARRAY_SIZE(ctx));
>   
>   	for (n = 0; n < nctx; n++) {
> -		ctx[n] = kernel_context(i915);
> +		ctx[n] = kernel_context(gt->i915);
>   		if (!ctx[n]) {
>   			err = -ENOMEM;
>   			nctx = n;
> @@ -1845,7 +1845,7 @@ static int nop_virtual_engine(struct drm_i915_private *i915,
>   		}
>   	}
>   
> -	err = igt_live_test_begin(&t, i915, __func__, ve[0]->engine->name);
> +	err = igt_live_test_begin(&t, gt->i915, __func__, ve[0]->engine->name);
>   	if (err)
>   		goto out;
>   
> @@ -1892,7 +1892,7 @@ static int nop_virtual_engine(struct drm_i915_private *i915,
>   					  request[nc]->fence.context,
>   					  request[nc]->fence.seqno);
>   				GEM_TRACE_DUMP();
> -				intel_gt_set_wedged(&i915->gt);
> +				intel_gt_set_wedged(gt);
>   				break;
>   			}
>   		}
> @@ -1914,7 +1914,7 @@ static int nop_virtual_engine(struct drm_i915_private *i915,
>   		prime, div64_u64(ktime_to_ns(times[1]), prime));
>   
>   out:
> -	if (igt_flush_test(i915))
> +	if (igt_flush_test(gt->i915))
>   		err = -EIO;
>   
>   	for (nc = 0; nc < nctx; nc++) {
> @@ -1927,19 +1927,18 @@ static int nop_virtual_engine(struct drm_i915_private *i915,
>   
>   static int live_virtual_engine(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct intel_engine_cs *siblings[MAX_ENGINE_INSTANCE + 1];
>   	struct intel_engine_cs *engine;
> -	struct intel_gt *gt = &i915->gt;
>   	enum intel_engine_id id;
>   	unsigned int class, inst;
>   	int err;
>   
> -	if (USES_GUC_SUBMISSION(i915))
> +	if (USES_GUC_SUBMISSION(gt->i915))
>   		return 0;
>   
> -	for_each_engine(engine, i915, id) {
> -		err = nop_virtual_engine(i915, &engine, 1, 1, 0);
> +	for_each_engine(engine, gt->i915, id) {

^^^

> +		err = nop_virtual_engine(gt, &engine, 1, 1, 0);
>   		if (err) {
>   			pr_err("Failed to wrap engine %s: err=%d\n",
>   			       engine->name, err);
> @@ -1961,13 +1960,13 @@ static int live_virtual_engine(void *arg)
>   			continue;
>   
>   		for (n = 1; n <= nsibling + 1; n++) {
> -			err = nop_virtual_engine(i915, siblings, nsibling,
> +			err = nop_virtual_engine(gt, siblings, nsibling,
>   						 n, 0);
>   			if (err)
>   				return err;
>   		}
>   
> -		err = nop_virtual_engine(i915, siblings, nsibling, n, CHAIN);
> +		err = nop_virtual_engine(gt, siblings, nsibling, n, CHAIN);
>   		if (err)
>   			return err;
>   	}
> @@ -1975,7 +1974,7 @@ static int live_virtual_engine(void *arg)
>   	return 0;
>   }
>   
> -static int mask_virtual_engine(struct drm_i915_private *i915,
> +static int mask_virtual_engine(struct intel_gt *gt,
>   			       struct intel_engine_cs **siblings,
>   			       unsigned int nsibling)
>   {
> @@ -1991,7 +1990,7 @@ static int mask_virtual_engine(struct drm_i915_private *i915,
>   	 * restrict it to our desired engine within the virtual engine.
>   	 */
>   
> -	ctx = kernel_context(i915);
> +	ctx = kernel_context(gt->i915);
>   	if (!ctx)
>   		return -ENOMEM;
>   
> @@ -2005,7 +2004,7 @@ static int mask_virtual_engine(struct drm_i915_private *i915,
>   	if (err)
>   		goto out_put;
>   
> -	err = igt_live_test_begin(&t, i915, __func__, ve->engine->name);
> +	err = igt_live_test_begin(&t, gt->i915, __func__, ve->engine->name);
>   	if (err)
>   		goto out_unpin;
>   
> @@ -2036,7 +2035,7 @@ static int mask_virtual_engine(struct drm_i915_private *i915,
>   				  request[n]->fence.context,
>   				  request[n]->fence.seqno);
>   			GEM_TRACE_DUMP();
> -			intel_gt_set_wedged(&i915->gt);
> +			intel_gt_set_wedged(gt);
>   			err = -EIO;
>   			goto out;
>   		}
> @@ -2052,7 +2051,7 @@ static int mask_virtual_engine(struct drm_i915_private *i915,
>   
>   	err = igt_live_test_end(&t);
>   out:
> -	if (igt_flush_test(i915))
> +	if (igt_flush_test(gt->i915))
>   		err = -EIO;
>   
>   	for (n = 0; n < nsibling; n++)
> @@ -2069,13 +2068,12 @@ static int mask_virtual_engine(struct drm_i915_private *i915,
>   
>   static int live_virtual_mask(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct intel_engine_cs *siblings[MAX_ENGINE_INSTANCE + 1];
> -	struct intel_gt *gt = &i915->gt;
>   	unsigned int class, inst;
>   	int err;
>   
> -	if (USES_GUC_SUBMISSION(i915))
> +	if (USES_GUC_SUBMISSION(gt->i915))
>   		return 0;
>   
>   	for (class = 0; class <= MAX_ENGINE_CLASS; class++) {
> @@ -2091,7 +2089,7 @@ static int live_virtual_mask(void *arg)
>   		if (nsibling < 2)
>   			continue;
>   
> -		err = mask_virtual_engine(i915, siblings, nsibling);
> +		err = mask_virtual_engine(gt, siblings, nsibling);
>   		if (err)
>   			return err;
>   	}
> @@ -2099,7 +2097,7 @@ static int live_virtual_mask(void *arg)
>   	return 0;
>   }
>   
> -static int preserved_virtual_engine(struct drm_i915_private *i915,
> +static int preserved_virtual_engine(struct intel_gt *gt,
>   				    struct intel_engine_cs **siblings,
>   				    unsigned int nsibling)
>   {
> @@ -2112,7 +2110,7 @@ static int preserved_virtual_engine(struct drm_i915_private *i915,
>   	int err = 0;
>   	u32 *cs;
>   
> -	ctx = kernel_context(i915);
> +	ctx = kernel_context(gt->i915);
>   	if (!ctx)
>   		return -ENOMEM;
>   
> @@ -2132,7 +2130,7 @@ static int preserved_virtual_engine(struct drm_i915_private *i915,
>   	if (err)
>   		goto out_put;
>   
> -	err = igt_live_test_begin(&t, i915, __func__, ve->engine->name);
> +	err = igt_live_test_begin(&t, gt->i915, __func__, ve->engine->name);
>   	if (err)
>   		goto out_unpin;
>   
> @@ -2212,9 +2210,8 @@ static int preserved_virtual_engine(struct drm_i915_private *i915,
>   
>   static int live_virtual_preserved(void *arg)
>   {
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct intel_engine_cs *siblings[MAX_ENGINE_INSTANCE + 1];
> -	struct intel_gt *gt = &i915->gt;
>   	unsigned int class, inst;
>   
>   	/*
> @@ -2223,11 +2220,11 @@ static int live_virtual_preserved(void *arg)
>   	 * are preserved.
>   	 */
>   
> -	if (USES_GUC_SUBMISSION(i915))
> +	if (USES_GUC_SUBMISSION(gt->i915))
>   		return 0;
>   
>   	/* As we use CS_GPR we cannot run before they existed on all engines. */
> -	if (INTEL_GEN(i915) < 9)
> +	if (INTEL_GEN(gt->i915) < 9)
>   		return 0;
>   
>   	for (class = 0; class <= MAX_ENGINE_CLASS; class++) {
> @@ -2243,7 +2240,7 @@ static int live_virtual_preserved(void *arg)
>   		if (nsibling < 2)
>   			continue;
>   
> -		err = preserved_virtual_engine(i915, siblings, nsibling);
> +		err = preserved_virtual_engine(gt, siblings, nsibling);
>   		if (err)
>   			return err;
>   	}
> @@ -2251,7 +2248,7 @@ static int live_virtual_preserved(void *arg)
>   	return 0;
>   }
>   
> -static int bond_virtual_engine(struct drm_i915_private *i915,
> +static int bond_virtual_engine(struct intel_gt *gt,
>   			       unsigned int class,
>   			       struct intel_engine_cs **siblings,
>   			       unsigned int nsibling,
> @@ -2267,13 +2264,13 @@ static int bond_virtual_engine(struct drm_i915_private *i915,
>   
>   	GEM_BUG_ON(nsibling >= ARRAY_SIZE(rq) - 1);
>   
> -	ctx = kernel_context(i915);
> +	ctx = kernel_context(gt->i915);
>   	if (!ctx)
>   		return -ENOMEM;
>   
>   	err = 0;
>   	rq[0] = ERR_PTR(-ENOMEM);
> -	for_each_engine(master, i915, id) {
> +	for_each_engine(master, gt->i915, id) {

^^^

>   		struct i915_sw_fence fence = {};
>   
>   		if (master->class == class)
> @@ -2378,7 +2375,7 @@ static int bond_virtual_engine(struct drm_i915_private *i915,
>   out:
>   	for (n = 0; !IS_ERR(rq[n]); n++)
>   		i915_request_put(rq[n]);
> -	if (igt_flush_test(i915))
> +	if (igt_flush_test(gt->i915))
>   		err = -EIO;
>   
>   	kernel_context_close(ctx);
> @@ -2395,13 +2392,12 @@ static int live_virtual_bond(void *arg)
>   		{ "schedule", BOND_SCHEDULE },
>   		{ },
>   	};
> -	struct drm_i915_private *i915 = arg;
> +	struct intel_gt *gt = arg;
>   	struct intel_engine_cs *siblings[MAX_ENGINE_INSTANCE + 1];
> -	struct intel_gt *gt = &i915->gt;
>   	unsigned int class, inst;
>   	int err;
>   
> -	if (USES_GUC_SUBMISSION(i915))
> +	if (USES_GUC_SUBMISSION(gt->i915))
>   		return 0;
>   
>   	for (class = 0; class <= MAX_ENGINE_CLASS; class++) {
> @@ -2420,7 +2416,7 @@ static int live_virtual_bond(void *arg)
>   			continue;
>   
>   		for (p = phases; p->name; p++) {
> -			err = bond_virtual_engine(i915,
> +			err = bond_virtual_engine(gt,
>   						  class, siblings, nsibling,
>   						  p->flags);
>   			if (err) {
> @@ -2462,7 +2458,7 @@ int intel_execlists_live_selftests(struct drm_i915_private *i915)
>   	if (intel_gt_is_wedged(&i915->gt))
>   		return 0;
>   
> -	return i915_live_subtests(tests, i915);
> +	return intel_gt_live_subtests(tests, &i915->gt);
>   }
>   
>   static void hexdump(const void *buf, size_t len)
> 

Not sure if my markers are at all useful, but same condition as previous 
patches:

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

Regards,

Tvrtko
Chris Wilson Oct. 16, 2019, 1:19 p.m. UTC | #2
Quoting Tvrtko Ursulin (2019-10-16 13:50:22)
> 
> On 16/10/2019 13:02, Chris Wilson wrote:
> Not sure if my markers are at all useful, but same condition as previous 
> patches:

I have been leaving gt->i915 as markers for what APIs need to be
cleaned up. for_each_engine() is one where I thought a sweep through
changing all in one go would be a really nice grand finale, taking a
couple of passes through the remaining for_each_engine(i915) to work out
if it was meant to be gt-centric, uabi, or context.
-Chris
Tvrtko Ursulin Oct. 16, 2019, 1:29 p.m. UTC | #3
On 16/10/2019 14:19, Chris Wilson wrote:
> Quoting Tvrtko Ursulin (2019-10-16 13:50:22)
>>
>> On 16/10/2019 13:02, Chris Wilson wrote:
>> Not sure if my markers are at all useful, but same condition as previous
>> patches:
> 
> I have been leaving gt->i915 as markers for what APIs need to be
> cleaned up. for_each_engine() is one where I thought a sweep through
> changing all in one go would be a really nice grand finale, taking a
> couple of passes through the remaining for_each_engine(i915) to work out
> if it was meant to be gt-centric, uabi, or context.

It can be done like that sure, I'll then hold off with my 3/3 patch and 
update it after you put these ones in. Can have those r-b's in other 
words as is.

Regards,

Tvrtko

Patch
diff mbox series

diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c
index 9c1f34fb5882..2868371c609e 100644
--- a/drivers/gpu/drm/i915/gt/selftest_lrc.c
+++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c
@@ -51,20 +51,20 @@  static struct i915_vma *create_scratch(struct intel_gt *gt)
 
 static int live_sanitycheck(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct i915_gem_engines_iter it;
 	struct i915_gem_context *ctx;
 	struct intel_context *ce;
 	struct igt_spinner spin;
 	int err = -ENOMEM;
 
-	if (!HAS_LOGICAL_RING_CONTEXTS(i915))
+	if (!HAS_LOGICAL_RING_CONTEXTS(gt->i915))
 		return 0;
 
-	if (igt_spinner_init(&spin, &i915->gt))
+	if (igt_spinner_init(&spin, gt))
 		return -ENOMEM;
 
-	ctx = kernel_context(i915);
+	ctx = kernel_context(gt->i915);
 	if (!ctx)
 		goto err_spin;
 
@@ -81,13 +81,13 @@  static int live_sanitycheck(void *arg)
 		if (!igt_wait_for_spinner(&spin, rq)) {
 			GEM_TRACE("spinner failed to start\n");
 			GEM_TRACE_DUMP();
-			intel_gt_set_wedged(&i915->gt);
+			intel_gt_set_wedged(gt);
 			err = -EIO;
 			goto err_ctx;
 		}
 
 		igt_spinner_end(&spin);
-		if (igt_flush_test(i915)) {
+		if (igt_flush_test(gt->i915)) {
 			err = -EIO;
 			goto err_ctx;
 		}
@@ -102,7 +102,7 @@  static int live_sanitycheck(void *arg)
 	return err;
 }
 
-static int live_unlite_restore(struct drm_i915_private *i915, int prio)
+static int live_unlite_restore(struct intel_gt *gt, int prio)
 {
 	struct intel_engine_cs *engine;
 	struct i915_gem_context *ctx;
@@ -115,15 +115,15 @@  static int live_unlite_restore(struct drm_i915_private *i915, int prio)
 	 * on the same engine from the same parent context.
 	 */
 
-	if (igt_spinner_init(&spin, &i915->gt))
+	if (igt_spinner_init(&spin, gt))
 		return err;
 
-	ctx = kernel_context(i915);
+	ctx = kernel_context(gt->i915);
 	if (!ctx)
 		goto err_spin;
 
 	err = 0;
-	for_each_engine(engine, i915, id) {
+	for_each_engine(engine, gt->i915, id) {
 		struct intel_context *ce[2] = {};
 		struct i915_request *rq[2];
 		struct igt_live_test t;
@@ -135,7 +135,7 @@  static int live_unlite_restore(struct drm_i915_private *i915, int prio)
 		if (!intel_engine_can_store_dword(engine))
 			continue;
 
-		if (igt_live_test_begin(&t, i915, __func__, engine->name)) {
+		if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) {
 			err = -EIO;
 			break;
 		}
@@ -416,7 +416,7 @@  slice_semaphore_queue(struct intel_engine_cs *outer,
 
 static int live_timeslice_preempt(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct drm_i915_gem_object *obj;
 	struct i915_vma *vma;
 	void *vaddr;
@@ -432,11 +432,11 @@  static int live_timeslice_preempt(void *arg)
 	 * ready task.
 	 */
 
-	obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
+	obj = i915_gem_object_create_internal(gt->i915, PAGE_SIZE);
 	if (IS_ERR(obj))
 		return PTR_ERR(obj);
 
-	vma = i915_vma_instance(obj, &i915->ggtt.vm, NULL);
+	vma = i915_vma_instance(obj, &gt->ggtt->vm, NULL);
 	if (IS_ERR(vma)) {
 		err = PTR_ERR(vma);
 		goto err_obj;
@@ -456,7 +456,7 @@  static int live_timeslice_preempt(void *arg)
 		struct intel_engine_cs *engine;
 		enum intel_engine_id id;
 
-		for_each_engine(engine, i915, id) {
+		for_each_engine(engine, gt->i915, id) {
 			if (!intel_engine_has_preemption(engine))
 				continue;
 
@@ -466,7 +466,7 @@  static int live_timeslice_preempt(void *arg)
 			if (err)
 				goto err_pin;
 
-			if (igt_flush_test(i915)) {
+			if (igt_flush_test(gt->i915)) {
 				err = -EIO;
 				goto err_pin;
 			}
@@ -484,7 +484,7 @@  static int live_timeslice_preempt(void *arg)
 
 static int live_busywait_preempt(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct i915_gem_context *ctx_hi, *ctx_lo;
 	struct intel_engine_cs *engine;
 	struct drm_i915_gem_object *obj;
@@ -498,19 +498,19 @@  static int live_busywait_preempt(void *arg)
 	 * preempt the busywaits used to synchronise between rings.
 	 */
 
-	ctx_hi = kernel_context(i915);
+	ctx_hi = kernel_context(gt->i915);
 	if (!ctx_hi)
 		return -ENOMEM;
 	ctx_hi->sched.priority =
 		I915_USER_PRIORITY(I915_CONTEXT_MAX_USER_PRIORITY);
 
-	ctx_lo = kernel_context(i915);
+	ctx_lo = kernel_context(gt->i915);
 	if (!ctx_lo)
 		goto err_ctx_hi;
 	ctx_lo->sched.priority =
 		I915_USER_PRIORITY(I915_CONTEXT_MIN_USER_PRIORITY);
 
-	obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
+	obj = i915_gem_object_create_internal(gt->i915, PAGE_SIZE);
 	if (IS_ERR(obj)) {
 		err = PTR_ERR(obj);
 		goto err_ctx_lo;
@@ -522,7 +522,7 @@  static int live_busywait_preempt(void *arg)
 		goto err_obj;
 	}
 
-	vma = i915_vma_instance(obj, &i915->ggtt.vm, NULL);
+	vma = i915_vma_instance(obj, &gt->ggtt->vm, NULL);
 	if (IS_ERR(vma)) {
 		err = PTR_ERR(vma);
 		goto err_map;
@@ -532,7 +532,7 @@  static int live_busywait_preempt(void *arg)
 	if (err)
 		goto err_map;
 
-	for_each_engine(engine, i915, id) {
+	for_each_engine(engine, gt->i915, id) {
 		struct i915_request *lo, *hi;
 		struct igt_live_test t;
 		u32 *cs;
@@ -543,7 +543,7 @@  static int live_busywait_preempt(void *arg)
 		if (!intel_engine_can_store_dword(engine))
 			continue;
 
-		if (igt_live_test_begin(&t, i915, __func__, engine->name)) {
+		if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) {
 			err = -EIO;
 			goto err_vma;
 		}
@@ -623,7 +623,7 @@  static int live_busywait_preempt(void *arg)
 		i915_request_add(hi);
 
 		if (i915_request_wait(lo, 0, HZ / 5) < 0) {
-			struct drm_printer p = drm_info_printer(i915->drm.dev);
+			struct drm_printer p = drm_info_printer(gt->i915->drm.dev);
 
 			pr_err("%s: Failed to preempt semaphore busywait!\n",
 			       engine->name);
@@ -631,7 +631,7 @@  static int live_busywait_preempt(void *arg)
 			intel_engine_dump(engine, &p, "%s\n", engine->name);
 			GEM_TRACE_DUMP();
 
-			intel_gt_set_wedged(&i915->gt);
+			intel_gt_set_wedged(gt);
 			err = -EIO;
 			goto err_vma;
 		}
@@ -677,45 +677,45 @@  spinner_create_request(struct igt_spinner *spin,
 
 static int live_preempt(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct i915_gem_context *ctx_hi, *ctx_lo;
 	struct igt_spinner spin_hi, spin_lo;
 	struct intel_engine_cs *engine;
 	enum intel_engine_id id;
 	int err = -ENOMEM;
 
-	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
+	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
 		return 0;
 
-	if (!(i915->caps.scheduler & I915_SCHEDULER_CAP_PREEMPTION))
+	if (!(gt->i915->caps.scheduler & I915_SCHEDULER_CAP_PREEMPTION))
 		pr_err("Logical preemption supported, but not exposed\n");
 
-	if (igt_spinner_init(&spin_hi, &i915->gt))
+	if (igt_spinner_init(&spin_hi, gt))
 		return -ENOMEM;
 
-	if (igt_spinner_init(&spin_lo, &i915->gt))
+	if (igt_spinner_init(&spin_lo, gt))
 		goto err_spin_hi;
 
-	ctx_hi = kernel_context(i915);
+	ctx_hi = kernel_context(gt->i915);
 	if (!ctx_hi)
 		goto err_spin_lo;
 	ctx_hi->sched.priority =
 		I915_USER_PRIORITY(I915_CONTEXT_MAX_USER_PRIORITY);
 
-	ctx_lo = kernel_context(i915);
+	ctx_lo = kernel_context(gt->i915);
 	if (!ctx_lo)
 		goto err_ctx_hi;
 	ctx_lo->sched.priority =
 		I915_USER_PRIORITY(I915_CONTEXT_MIN_USER_PRIORITY);
 
-	for_each_engine(engine, i915, id) {
+	for_each_engine(engine, gt->i915, id) {
 		struct igt_live_test t;
 		struct i915_request *rq;
 
 		if (!intel_engine_has_preemption(engine))
 			continue;
 
-		if (igt_live_test_begin(&t, i915, __func__, engine->name)) {
+		if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) {
 			err = -EIO;
 			goto err_ctx_lo;
 		}
@@ -731,7 +731,7 @@  static int live_preempt(void *arg)
 		if (!igt_wait_for_spinner(&spin_lo, rq)) {
 			GEM_TRACE("lo spinner failed to start\n");
 			GEM_TRACE_DUMP();
-			intel_gt_set_wedged(&i915->gt);
+			intel_gt_set_wedged(gt);
 			err = -EIO;
 			goto err_ctx_lo;
 		}
@@ -748,7 +748,7 @@  static int live_preempt(void *arg)
 		if (!igt_wait_for_spinner(&spin_hi, rq)) {
 			GEM_TRACE("hi spinner failed to start\n");
 			GEM_TRACE_DUMP();
-			intel_gt_set_wedged(&i915->gt);
+			intel_gt_set_wedged(gt);
 			err = -EIO;
 			goto err_ctx_lo;
 		}
@@ -776,7 +776,7 @@  static int live_preempt(void *arg)
 
 static int live_late_preempt(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct i915_gem_context *ctx_hi, *ctx_lo;
 	struct igt_spinner spin_hi, spin_lo;
 	struct intel_engine_cs *engine;
@@ -784,34 +784,34 @@  static int live_late_preempt(void *arg)
 	enum intel_engine_id id;
 	int err = -ENOMEM;
 
-	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
+	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
 		return 0;
 
-	if (igt_spinner_init(&spin_hi, &i915->gt))
+	if (igt_spinner_init(&spin_hi, gt))
 		return -ENOMEM;
 
-	if (igt_spinner_init(&spin_lo, &i915->gt))
+	if (igt_spinner_init(&spin_lo, gt))
 		goto err_spin_hi;
 
-	ctx_hi = kernel_context(i915);
+	ctx_hi = kernel_context(gt->i915);
 	if (!ctx_hi)
 		goto err_spin_lo;
 
-	ctx_lo = kernel_context(i915);
+	ctx_lo = kernel_context(gt->i915);
 	if (!ctx_lo)
 		goto err_ctx_hi;
 
 	/* Make sure ctx_lo stays before ctx_hi until we trigger preemption. */
 	ctx_lo->sched.priority = I915_USER_PRIORITY(1);
 
-	for_each_engine(engine, i915, id) {
+	for_each_engine(engine, gt->i915, id) {
 		struct igt_live_test t;
 		struct i915_request *rq;
 
 		if (!intel_engine_has_preemption(engine))
 			continue;
 
-		if (igt_live_test_begin(&t, i915, __func__, engine->name)) {
+		if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) {
 			err = -EIO;
 			goto err_ctx_lo;
 		}
@@ -875,7 +875,7 @@  static int live_late_preempt(void *arg)
 err_wedged:
 	igt_spinner_end(&spin_hi);
 	igt_spinner_end(&spin_lo);
-	intel_gt_set_wedged(&i915->gt);
+	intel_gt_set_wedged(gt);
 	err = -EIO;
 	goto err_ctx_lo;
 }
@@ -885,14 +885,13 @@  struct preempt_client {
 	struct i915_gem_context *ctx;
 };
 
-static int preempt_client_init(struct drm_i915_private *i915,
-			       struct preempt_client *c)
+static int preempt_client_init(struct intel_gt *gt, struct preempt_client *c)
 {
-	c->ctx = kernel_context(i915);
+	c->ctx = kernel_context(gt->i915);
 	if (!c->ctx)
 		return -ENOMEM;
 
-	if (igt_spinner_init(&c->spin, &i915->gt))
+	if (igt_spinner_init(&c->spin, gt))
 		goto err_ctx;
 
 	return 0;
@@ -910,7 +909,7 @@  static void preempt_client_fini(struct preempt_client *c)
 
 static int live_nopreempt(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct intel_engine_cs *engine;
 	struct preempt_client a, b;
 	enum intel_engine_id id;
@@ -921,16 +920,16 @@  static int live_nopreempt(void *arg)
 	 * that may be being observed and not want to be interrupted.
 	 */
 
-	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
+	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
 		return 0;
 
-	if (preempt_client_init(i915, &a))
+	if (preempt_client_init(gt, &a))
 		return -ENOMEM;
-	if (preempt_client_init(i915, &b))
+	if (preempt_client_init(gt, &b))
 		goto err_client_a;
 	b.ctx->sched.priority = I915_USER_PRIORITY(I915_PRIORITY_MAX);
 
-	for_each_engine(engine, i915, id) {
+	for_each_engine(engine, gt->i915, id) {
 		struct i915_request *rq_a, *rq_b;
 
 		if (!intel_engine_has_preemption(engine))
@@ -990,7 +989,7 @@  static int live_nopreempt(void *arg)
 			goto err_wedged;
 		}
 
-		if (igt_flush_test(i915))
+		if (igt_flush_test(gt->i915))
 			goto err_wedged;
 	}
 
@@ -1004,14 +1003,14 @@  static int live_nopreempt(void *arg)
 err_wedged:
 	igt_spinner_end(&b.spin);
 	igt_spinner_end(&a.spin);
-	intel_gt_set_wedged(&i915->gt);
+	intel_gt_set_wedged(gt);
 	err = -EIO;
 	goto err_client_b;
 }
 
 static int live_suppress_self_preempt(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct intel_engine_cs *engine;
 	struct i915_sched_attr attr = {
 		.priority = I915_USER_PRIORITY(I915_PRIORITY_MAX)
@@ -1027,28 +1026,28 @@  static int live_suppress_self_preempt(void *arg)
 	 * completion event.
 	 */
 
-	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
+	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
 		return 0;
 
-	if (USES_GUC_SUBMISSION(i915))
+	if (USES_GUC_SUBMISSION(gt->i915))
 		return 0; /* presume black blox */
 
-	if (intel_vgpu_active(i915))
+	if (intel_vgpu_active(gt->i915))
 		return 0; /* GVT forces single port & request submission */
 
-	if (preempt_client_init(i915, &a))
+	if (preempt_client_init(gt, &a))
 		return -ENOMEM;
-	if (preempt_client_init(i915, &b))
+	if (preempt_client_init(gt, &b))
 		goto err_client_a;
 
-	for_each_engine(engine, i915, id) {
+	for_each_engine(engine, gt->i915, id) {
 		struct i915_request *rq_a, *rq_b;
 		int depth;
 
 		if (!intel_engine_has_preemption(engine))
 			continue;
 
-		if (igt_flush_test(i915))
+		if (igt_flush_test(gt->i915))
 			goto err_wedged;
 
 		intel_engine_pm_get(engine);
@@ -1109,7 +1108,7 @@  static int live_suppress_self_preempt(void *arg)
 		}
 
 		intel_engine_pm_put(engine);
-		if (igt_flush_test(i915))
+		if (igt_flush_test(gt->i915))
 			goto err_wedged;
 	}
 
@@ -1123,7 +1122,7 @@  static int live_suppress_self_preempt(void *arg)
 err_wedged:
 	igt_spinner_end(&b.spin);
 	igt_spinner_end(&a.spin);
-	intel_gt_set_wedged(&i915->gt);
+	intel_gt_set_wedged(gt);
 	err = -EIO;
 	goto err_client_b;
 }
@@ -1183,7 +1182,7 @@  static void dummy_request_free(struct i915_request *dummy)
 
 static int live_suppress_wait_preempt(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct preempt_client client[4];
 	struct intel_engine_cs *engine;
 	enum intel_engine_id id;
@@ -1196,19 +1195,19 @@  static int live_suppress_wait_preempt(void *arg)
 	 * not needlessly generate preempt-to-idle cycles.
 	 */
 
-	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
+	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
 		return 0;
 
-	if (preempt_client_init(i915, &client[0])) /* ELSP[0] */
+	if (preempt_client_init(gt, &client[0])) /* ELSP[0] */
 		return -ENOMEM;
-	if (preempt_client_init(i915, &client[1])) /* ELSP[1] */
+	if (preempt_client_init(gt, &client[1])) /* ELSP[1] */
 		goto err_client_0;
-	if (preempt_client_init(i915, &client[2])) /* head of queue */
+	if (preempt_client_init(gt, &client[2])) /* head of queue */
 		goto err_client_1;
-	if (preempt_client_init(i915, &client[3])) /* bystander */
+	if (preempt_client_init(gt, &client[3])) /* bystander */
 		goto err_client_2;
 
-	for_each_engine(engine, i915, id) {
+	for_each_engine(engine, gt->i915, id) {
 		int depth;
 
 		if (!intel_engine_has_preemption(engine))
@@ -1263,7 +1262,7 @@  static int live_suppress_wait_preempt(void *arg)
 			for (i = 0; i < ARRAY_SIZE(client); i++)
 				igt_spinner_end(&client[i].spin);
 
-			if (igt_flush_test(i915))
+			if (igt_flush_test(gt->i915))
 				goto err_wedged;
 
 			if (engine->execlists.preempt_hang.count) {
@@ -1291,14 +1290,14 @@  static int live_suppress_wait_preempt(void *arg)
 err_wedged:
 	for (i = 0; i < ARRAY_SIZE(client); i++)
 		igt_spinner_end(&client[i].spin);
-	intel_gt_set_wedged(&i915->gt);
+	intel_gt_set_wedged(gt);
 	err = -EIO;
 	goto err_client_3;
 }
 
 static int live_chain_preempt(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct intel_engine_cs *engine;
 	struct preempt_client hi, lo;
 	enum intel_engine_id id;
@@ -1310,16 +1309,16 @@  static int live_chain_preempt(void *arg)
 	 * the previously submitted spinner in B.
 	 */
 
-	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
+	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
 		return 0;
 
-	if (preempt_client_init(i915, &hi))
+	if (preempt_client_init(gt, &hi))
 		return -ENOMEM;
 
-	if (preempt_client_init(i915, &lo))
+	if (preempt_client_init(gt, &lo))
 		goto err_client_hi;
 
-	for_each_engine(engine, i915, id) {
+	for_each_engine(engine, gt->i915, id) {
 		struct i915_sched_attr attr = {
 			.priority = I915_USER_PRIORITY(I915_PRIORITY_MAX),
 		};
@@ -1350,7 +1349,7 @@  static int live_chain_preempt(void *arg)
 			goto err_wedged;
 		}
 
-		if (igt_live_test_begin(&t, i915, __func__, engine->name)) {
+		if (igt_live_test_begin(&t, gt->i915, __func__, engine->name)) {
 			err = -EIO;
 			goto err_wedged;
 		}
@@ -1388,7 +1387,7 @@  static int live_chain_preempt(void *arg)
 			igt_spinner_end(&hi.spin);
 			if (i915_request_wait(rq, 0, HZ / 5) < 0) {
 				struct drm_printer p =
-					drm_info_printer(i915->drm.dev);
+					drm_info_printer(gt->i915->drm.dev);
 
 				pr_err("Failed to preempt over chain of %d\n",
 				       count);
@@ -1404,7 +1403,7 @@  static int live_chain_preempt(void *arg)
 			i915_request_add(rq);
 			if (i915_request_wait(rq, 0, HZ / 5) < 0) {
 				struct drm_printer p =
-					drm_info_printer(i915->drm.dev);
+					drm_info_printer(gt->i915->drm.dev);
 
 				pr_err("Failed to flush low priority chain of %d requests\n",
 				       count);
@@ -1430,45 +1429,45 @@  static int live_chain_preempt(void *arg)
 err_wedged:
 	igt_spinner_end(&hi.spin);
 	igt_spinner_end(&lo.spin);
-	intel_gt_set_wedged(&i915->gt);
+	intel_gt_set_wedged(gt);
 	err = -EIO;
 	goto err_client_lo;
 }
 
 static int live_preempt_hang(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct i915_gem_context *ctx_hi, *ctx_lo;
 	struct igt_spinner spin_hi, spin_lo;
 	struct intel_engine_cs *engine;
 	enum intel_engine_id id;
 	int err = -ENOMEM;
 
-	if (!HAS_LOGICAL_RING_PREEMPTION(i915))
+	if (!HAS_LOGICAL_RING_PREEMPTION(gt->i915))
 		return 0;
 
-	if (!intel_has_reset_engine(&i915->gt))
+	if (!intel_has_reset_engine(gt))
 		return 0;
 
-	if (igt_spinner_init(&spin_hi, &i915->gt))
+	if (igt_spinner_init(&spin_hi, gt))
 		return -ENOMEM;
 
-	if (igt_spinner_init(&spin_lo, &i915->gt))
+	if (igt_spinner_init(&spin_lo, gt))
 		goto err_spin_hi;
 
-	ctx_hi = kernel_context(i915);
+	ctx_hi = kernel_context(gt->i915);
 	if (!ctx_hi)
 		goto err_spin_lo;
 	ctx_hi->sched.priority =
 		I915_USER_PRIORITY(I915_CONTEXT_MAX_USER_PRIORITY);
 
-	ctx_lo = kernel_context(i915);
+	ctx_lo = kernel_context(gt->i915);
 	if (!ctx_lo)
 		goto err_ctx_hi;
 	ctx_lo->sched.priority =
 		I915_USER_PRIORITY(I915_CONTEXT_MIN_USER_PRIORITY);
 
-	for_each_engine(engine, i915, id) {
+	for_each_engine(engine, gt->i915, id) {
 		struct i915_request *rq;
 
 		if (!intel_engine_has_preemption(engine))
@@ -1485,7 +1484,7 @@  static int live_preempt_hang(void *arg)
 		if (!igt_wait_for_spinner(&spin_lo, rq)) {
 			GEM_TRACE("lo spinner failed to start\n");
 			GEM_TRACE_DUMP();
-			intel_gt_set_wedged(&i915->gt);
+			intel_gt_set_wedged(gt);
 			err = -EIO;
 			goto err_ctx_lo;
 		}
@@ -1507,28 +1506,28 @@  static int live_preempt_hang(void *arg)
 						 HZ / 10)) {
 			pr_err("Preemption did not occur within timeout!");
 			GEM_TRACE_DUMP();
-			intel_gt_set_wedged(&i915->gt);
+			intel_gt_set_wedged(gt);
 			err = -EIO;
 			goto err_ctx_lo;
 		}
 
-		set_bit(I915_RESET_ENGINE + id, &i915->gt.reset.flags);
+		set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
 		intel_engine_reset(engine, NULL);
-		clear_bit(I915_RESET_ENGINE + id, &i915->gt.reset.flags);
+		clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
 
 		engine->execlists.preempt_hang.inject_hang = false;
 
 		if (!igt_wait_for_spinner(&spin_hi, rq)) {
 			GEM_TRACE("hi spinner failed to start\n");
 			GEM_TRACE_DUMP();
-			intel_gt_set_wedged(&i915->gt);
+			intel_gt_set_wedged(gt);
 			err = -EIO;
 			goto err_ctx_lo;
 		}
 
 		igt_spinner_end(&spin_hi);
 		igt_spinner_end(&spin_lo);
-		if (igt_flush_test(i915)) {
+		if (igt_flush_test(gt->i915)) {
 			err = -EIO;
 			goto err_ctx_lo;
 		}
@@ -1557,7 +1556,7 @@  static int random_priority(struct rnd_state *rnd)
 }
 
 struct preempt_smoke {
-	struct drm_i915_private *i915;
+	struct intel_gt *gt;
 	struct i915_gem_context **contexts;
 	struct intel_engine_cs *engine;
 	struct drm_i915_gem_object *batch;
@@ -1657,7 +1656,7 @@  static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)
 	unsigned long count;
 	int err = 0;
 
-	for_each_engine(engine, smoke->i915, id) {
+	for_each_engine(engine, smoke->gt->i915, id) {
 		arg[id] = *smoke;
 		arg[id].engine = engine;
 		if (!(flags & BATCH))
@@ -1674,7 +1673,7 @@  static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)
 	}
 
 	count = 0;
-	for_each_engine(engine, smoke->i915, id) {
+	for_each_engine(engine, smoke->gt->i915, id) {
 		int status;
 
 		if (IS_ERR_OR_NULL(tsk[id]))
@@ -1691,7 +1690,7 @@  static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)
 
 	pr_info("Submitted %lu crescendo:%x requests across %d engines and %d contexts\n",
 		count, flags,
-		RUNTIME_INFO(smoke->i915)->num_engines, smoke->ncontext);
+		RUNTIME_INFO(smoke->gt->i915)->num_engines, smoke->ncontext);
 	return 0;
 }
 
@@ -1703,7 +1702,7 @@  static int smoke_random(struct preempt_smoke *smoke, unsigned int flags)
 
 	count = 0;
 	do {
-		for_each_engine(smoke->engine, smoke->i915, id) {
+		for_each_engine(smoke->engine, smoke->gt->i915, id) {
 			struct i915_gem_context *ctx = smoke_context(smoke);
 			int err;
 
@@ -1719,14 +1718,14 @@  static int smoke_random(struct preempt_smoke *smoke, unsigned int flags)
 
 	pr_info("Submitted %lu random:%x requests across %d engines and %d contexts\n",
 		count, flags,
-		RUNTIME_INFO(smoke->i915)->num_engines, smoke->ncontext);
+		RUNTIME_INFO(smoke->gt->i915)->num_engines, smoke->ncontext);
 	return 0;
 }
 
 static int live_preempt_smoke(void *arg)
 {
 	struct preempt_smoke smoke = {
-		.i915 = arg,
+		.gt = arg,
 		.prng = I915_RND_STATE_INITIALIZER(i915_selftest.random_seed),
 		.ncontext = 1024,
 	};
@@ -1736,7 +1735,7 @@  static int live_preempt_smoke(void *arg)
 	u32 *cs;
 	int n;
 
-	if (!HAS_LOGICAL_RING_PREEMPTION(smoke.i915))
+	if (!HAS_LOGICAL_RING_PREEMPTION(smoke.gt->i915))
 		return 0;
 
 	smoke.contexts = kmalloc_array(smoke.ncontext,
@@ -1745,7 +1744,8 @@  static int live_preempt_smoke(void *arg)
 	if (!smoke.contexts)
 		return -ENOMEM;
 
-	smoke.batch = i915_gem_object_create_internal(smoke.i915, PAGE_SIZE);
+	smoke.batch =
+		i915_gem_object_create_internal(smoke.gt->i915, PAGE_SIZE);
 	if (IS_ERR(smoke.batch)) {
 		err = PTR_ERR(smoke.batch);
 		goto err_free;
@@ -1762,13 +1762,13 @@  static int live_preempt_smoke(void *arg)
 	i915_gem_object_flush_map(smoke.batch);
 	i915_gem_object_unpin_map(smoke.batch);
 
-	if (igt_live_test_begin(&t, smoke.i915, __func__, "all")) {
+	if (igt_live_test_begin(&t, smoke.gt->i915, __func__, "all")) {
 		err = -EIO;
 		goto err_batch;
 	}
 
 	for (n = 0; n < smoke.ncontext; n++) {
-		smoke.contexts[n] = kernel_context(smoke.i915);
+		smoke.contexts[n] = kernel_context(smoke.gt->i915);
 		if (!smoke.contexts[n])
 			goto err_ctx;
 	}
@@ -1801,7 +1801,7 @@  static int live_preempt_smoke(void *arg)
 	return err;
 }
 
-static int nop_virtual_engine(struct drm_i915_private *i915,
+static int nop_virtual_engine(struct intel_gt *gt,
 			      struct intel_engine_cs **siblings,
 			      unsigned int nsibling,
 			      unsigned int nctx,
@@ -1820,7 +1820,7 @@  static int nop_virtual_engine(struct drm_i915_private *i915,
 	GEM_BUG_ON(!nctx || nctx > ARRAY_SIZE(ctx));
 
 	for (n = 0; n < nctx; n++) {
-		ctx[n] = kernel_context(i915);
+		ctx[n] = kernel_context(gt->i915);
 		if (!ctx[n]) {
 			err = -ENOMEM;
 			nctx = n;
@@ -1845,7 +1845,7 @@  static int nop_virtual_engine(struct drm_i915_private *i915,
 		}
 	}
 
-	err = igt_live_test_begin(&t, i915, __func__, ve[0]->engine->name);
+	err = igt_live_test_begin(&t, gt->i915, __func__, ve[0]->engine->name);
 	if (err)
 		goto out;
 
@@ -1892,7 +1892,7 @@  static int nop_virtual_engine(struct drm_i915_private *i915,
 					  request[nc]->fence.context,
 					  request[nc]->fence.seqno);
 				GEM_TRACE_DUMP();
-				intel_gt_set_wedged(&i915->gt);
+				intel_gt_set_wedged(gt);
 				break;
 			}
 		}
@@ -1914,7 +1914,7 @@  static int nop_virtual_engine(struct drm_i915_private *i915,
 		prime, div64_u64(ktime_to_ns(times[1]), prime));
 
 out:
-	if (igt_flush_test(i915))
+	if (igt_flush_test(gt->i915))
 		err = -EIO;
 
 	for (nc = 0; nc < nctx; nc++) {
@@ -1927,19 +1927,18 @@  static int nop_virtual_engine(struct drm_i915_private *i915,
 
 static int live_virtual_engine(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct intel_engine_cs *siblings[MAX_ENGINE_INSTANCE + 1];
 	struct intel_engine_cs *engine;
-	struct intel_gt *gt = &i915->gt;
 	enum intel_engine_id id;
 	unsigned int class, inst;
 	int err;
 
-	if (USES_GUC_SUBMISSION(i915))
+	if (USES_GUC_SUBMISSION(gt->i915))
 		return 0;
 
-	for_each_engine(engine, i915, id) {
-		err = nop_virtual_engine(i915, &engine, 1, 1, 0);
+	for_each_engine(engine, gt->i915, id) {
+		err = nop_virtual_engine(gt, &engine, 1, 1, 0);
 		if (err) {
 			pr_err("Failed to wrap engine %s: err=%d\n",
 			       engine->name, err);
@@ -1961,13 +1960,13 @@  static int live_virtual_engine(void *arg)
 			continue;
 
 		for (n = 1; n <= nsibling + 1; n++) {
-			err = nop_virtual_engine(i915, siblings, nsibling,
+			err = nop_virtual_engine(gt, siblings, nsibling,
 						 n, 0);
 			if (err)
 				return err;
 		}
 
-		err = nop_virtual_engine(i915, siblings, nsibling, n, CHAIN);
+		err = nop_virtual_engine(gt, siblings, nsibling, n, CHAIN);
 		if (err)
 			return err;
 	}
@@ -1975,7 +1974,7 @@  static int live_virtual_engine(void *arg)
 	return 0;
 }
 
-static int mask_virtual_engine(struct drm_i915_private *i915,
+static int mask_virtual_engine(struct intel_gt *gt,
 			       struct intel_engine_cs **siblings,
 			       unsigned int nsibling)
 {
@@ -1991,7 +1990,7 @@  static int mask_virtual_engine(struct drm_i915_private *i915,
 	 * restrict it to our desired engine within the virtual engine.
 	 */
 
-	ctx = kernel_context(i915);
+	ctx = kernel_context(gt->i915);
 	if (!ctx)
 		return -ENOMEM;
 
@@ -2005,7 +2004,7 @@  static int mask_virtual_engine(struct drm_i915_private *i915,
 	if (err)
 		goto out_put;
 
-	err = igt_live_test_begin(&t, i915, __func__, ve->engine->name);
+	err = igt_live_test_begin(&t, gt->i915, __func__, ve->engine->name);
 	if (err)
 		goto out_unpin;
 
@@ -2036,7 +2035,7 @@  static int mask_virtual_engine(struct drm_i915_private *i915,
 				  request[n]->fence.context,
 				  request[n]->fence.seqno);
 			GEM_TRACE_DUMP();
-			intel_gt_set_wedged(&i915->gt);
+			intel_gt_set_wedged(gt);
 			err = -EIO;
 			goto out;
 		}
@@ -2052,7 +2051,7 @@  static int mask_virtual_engine(struct drm_i915_private *i915,
 
 	err = igt_live_test_end(&t);
 out:
-	if (igt_flush_test(i915))
+	if (igt_flush_test(gt->i915))
 		err = -EIO;
 
 	for (n = 0; n < nsibling; n++)
@@ -2069,13 +2068,12 @@  static int mask_virtual_engine(struct drm_i915_private *i915,
 
 static int live_virtual_mask(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct intel_engine_cs *siblings[MAX_ENGINE_INSTANCE + 1];
-	struct intel_gt *gt = &i915->gt;
 	unsigned int class, inst;
 	int err;
 
-	if (USES_GUC_SUBMISSION(i915))
+	if (USES_GUC_SUBMISSION(gt->i915))
 		return 0;
 
 	for (class = 0; class <= MAX_ENGINE_CLASS; class++) {
@@ -2091,7 +2089,7 @@  static int live_virtual_mask(void *arg)
 		if (nsibling < 2)
 			continue;
 
-		err = mask_virtual_engine(i915, siblings, nsibling);
+		err = mask_virtual_engine(gt, siblings, nsibling);
 		if (err)
 			return err;
 	}
@@ -2099,7 +2097,7 @@  static int live_virtual_mask(void *arg)
 	return 0;
 }
 
-static int preserved_virtual_engine(struct drm_i915_private *i915,
+static int preserved_virtual_engine(struct intel_gt *gt,
 				    struct intel_engine_cs **siblings,
 				    unsigned int nsibling)
 {
@@ -2112,7 +2110,7 @@  static int preserved_virtual_engine(struct drm_i915_private *i915,
 	int err = 0;
 	u32 *cs;
 
-	ctx = kernel_context(i915);
+	ctx = kernel_context(gt->i915);
 	if (!ctx)
 		return -ENOMEM;
 
@@ -2132,7 +2130,7 @@  static int preserved_virtual_engine(struct drm_i915_private *i915,
 	if (err)
 		goto out_put;
 
-	err = igt_live_test_begin(&t, i915, __func__, ve->engine->name);
+	err = igt_live_test_begin(&t, gt->i915, __func__, ve->engine->name);
 	if (err)
 		goto out_unpin;
 
@@ -2212,9 +2210,8 @@  static int preserved_virtual_engine(struct drm_i915_private *i915,
 
 static int live_virtual_preserved(void *arg)
 {
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct intel_engine_cs *siblings[MAX_ENGINE_INSTANCE + 1];
-	struct intel_gt *gt = &i915->gt;
 	unsigned int class, inst;
 
 	/*
@@ -2223,11 +2220,11 @@  static int live_virtual_preserved(void *arg)
 	 * are preserved.
 	 */
 
-	if (USES_GUC_SUBMISSION(i915))
+	if (USES_GUC_SUBMISSION(gt->i915))
 		return 0;
 
 	/* As we use CS_GPR we cannot run before they existed on all engines. */
-	if (INTEL_GEN(i915) < 9)
+	if (INTEL_GEN(gt->i915) < 9)
 		return 0;
 
 	for (class = 0; class <= MAX_ENGINE_CLASS; class++) {
@@ -2243,7 +2240,7 @@  static int live_virtual_preserved(void *arg)
 		if (nsibling < 2)
 			continue;
 
-		err = preserved_virtual_engine(i915, siblings, nsibling);
+		err = preserved_virtual_engine(gt, siblings, nsibling);
 		if (err)
 			return err;
 	}
@@ -2251,7 +2248,7 @@  static int live_virtual_preserved(void *arg)
 	return 0;
 }
 
-static int bond_virtual_engine(struct drm_i915_private *i915,
+static int bond_virtual_engine(struct intel_gt *gt,
 			       unsigned int class,
 			       struct intel_engine_cs **siblings,
 			       unsigned int nsibling,
@@ -2267,13 +2264,13 @@  static int bond_virtual_engine(struct drm_i915_private *i915,
 
 	GEM_BUG_ON(nsibling >= ARRAY_SIZE(rq) - 1);
 
-	ctx = kernel_context(i915);
+	ctx = kernel_context(gt->i915);
 	if (!ctx)
 		return -ENOMEM;
 
 	err = 0;
 	rq[0] = ERR_PTR(-ENOMEM);
-	for_each_engine(master, i915, id) {
+	for_each_engine(master, gt->i915, id) {
 		struct i915_sw_fence fence = {};
 
 		if (master->class == class)
@@ -2378,7 +2375,7 @@  static int bond_virtual_engine(struct drm_i915_private *i915,
 out:
 	for (n = 0; !IS_ERR(rq[n]); n++)
 		i915_request_put(rq[n]);
-	if (igt_flush_test(i915))
+	if (igt_flush_test(gt->i915))
 		err = -EIO;
 
 	kernel_context_close(ctx);
@@ -2395,13 +2392,12 @@  static int live_virtual_bond(void *arg)
 		{ "schedule", BOND_SCHEDULE },
 		{ },
 	};
-	struct drm_i915_private *i915 = arg;
+	struct intel_gt *gt = arg;
 	struct intel_engine_cs *siblings[MAX_ENGINE_INSTANCE + 1];
-	struct intel_gt *gt = &i915->gt;
 	unsigned int class, inst;
 	int err;
 
-	if (USES_GUC_SUBMISSION(i915))
+	if (USES_GUC_SUBMISSION(gt->i915))
 		return 0;
 
 	for (class = 0; class <= MAX_ENGINE_CLASS; class++) {
@@ -2420,7 +2416,7 @@  static int live_virtual_bond(void *arg)
 			continue;
 
 		for (p = phases; p->name; p++) {
-			err = bond_virtual_engine(i915,
+			err = bond_virtual_engine(gt,
 						  class, siblings, nsibling,
 						  p->flags);
 			if (err) {
@@ -2462,7 +2458,7 @@  int intel_execlists_live_selftests(struct drm_i915_private *i915)
 	if (intel_gt_is_wedged(&i915->gt))
 		return 0;
 
-	return i915_live_subtests(tests, i915);
+	return intel_gt_live_subtests(tests, &i915->gt);
 }
 
 static void hexdump(const void *buf, size_t len)