Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8bdd9cc authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915/selftests: Live tests emit requests and so require rpm

As we emit requests or touch HW directly for some of the live tests, the
requirement is that we hold the rpm wakeref before doing so. We want a
mix of granularity since we will want to test runtime suspend, so try to
mark up only the critical sections where we need rpm for the live test.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108002


Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180920144934.16611-1-chris@chris-wilson.co.uk
parent 8c01903c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -298,6 +298,7 @@ static int igt_gem_coherency(void *arg)
	values = offsets + ncachelines;

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);
	for (over = igt_coherency_mode; over->name; over++) {
		if (!over->set)
			continue;
@@ -375,6 +376,7 @@ static int igt_gem_coherency(void *arg)
		}
	}
unlock:
	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);
	kfree(offsets);
	return err;
+6 −0
Original line number Diff line number Diff line
@@ -119,6 +119,7 @@ static int live_nop_switch(void *arg)
		return PTR_ERR(file);

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);

	ctx = kcalloc(nctx, sizeof(*ctx), GFP_KERNEL);
	if (!ctx) {
@@ -221,6 +222,7 @@ static int live_nop_switch(void *arg)
	}

out_unlock:
	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);
	mock_file_free(i915, file);
	return err;
@@ -831,6 +833,8 @@ static int igt_switch_to_kernel_context(void *arg)
	 */

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);

	ctx = kernel_context(i915);
	if (IS_ERR(ctx)) {
		mutex_unlock(&i915->drm.struct_mutex);
@@ -853,6 +857,8 @@ static int igt_switch_to_kernel_context(void *arg)
	GEM_TRACE_DUMP_ON(err);
	if (igt_flush_test(i915, I915_WAIT_LOCKED))
		err = -EIO;

	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);

	kernel_context_close(ctx);
+8 −0
Original line number Diff line number Diff line
@@ -342,6 +342,7 @@ static int live_nop_request(void *arg)
	 */

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);

	for_each_engine(engine, i915, id) {
		struct i915_request *request = NULL;
@@ -402,6 +403,7 @@ static int live_nop_request(void *arg)
	}

out_unlock:
	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
}
@@ -487,6 +489,7 @@ static int live_empty_request(void *arg)
	 */

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);

	batch = empty_batch(i915);
	if (IS_ERR(batch)) {
@@ -550,6 +553,7 @@ static int live_empty_request(void *arg)
	i915_vma_unpin(batch);
	i915_vma_put(batch);
out_unlock:
	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
}
@@ -644,6 +648,7 @@ static int live_all_engines(void *arg)
	 */

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);

	err = begin_live_test(&t, i915, __func__, "");
	if (err)
@@ -726,6 +731,7 @@ static int live_all_engines(void *arg)
	i915_vma_unpin(batch);
	i915_vma_put(batch);
out_unlock:
	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
}
@@ -747,6 +753,7 @@ static int live_sequential_engines(void *arg)
	 */

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);

	err = begin_live_test(&t, i915, __func__, "");
	if (err)
@@ -853,6 +860,7 @@ static int live_sequential_engines(void *arg)
		i915_request_put(request[id]);
	}
out_unlock:
	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
}
+4 −0
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ static int igt_guc_clients(void *args)

	GEM_BUG_ON(!HAS_GUC(dev_priv));
	mutex_lock(&dev_priv->drm.struct_mutex);
	intel_runtime_pm_get(dev_priv);

	guc = &dev_priv->guc;
	if (!guc) {
@@ -269,6 +270,7 @@ static int igt_guc_clients(void *args)
	guc_clients_create(guc);
	guc_clients_doorbell_init(guc);
unlock:
	intel_runtime_pm_put(dev_priv);
	mutex_unlock(&dev_priv->drm.struct_mutex);
	return err;
}
@@ -287,6 +289,7 @@ static int igt_guc_doorbells(void *arg)

	GEM_BUG_ON(!HAS_GUC(dev_priv));
	mutex_lock(&dev_priv->drm.struct_mutex);
	intel_runtime_pm_get(dev_priv);

	guc = &dev_priv->guc;
	if (!guc) {
@@ -379,6 +382,7 @@ static int igt_guc_doorbells(void *arg)
			guc_client_free(clients[i]);
		}
unlock:
	intel_runtime_pm_put(dev_priv);
	mutex_unlock(&dev_priv->drm.struct_mutex);
	return err;
}
+8 −0
Original line number Diff line number Diff line
@@ -221,6 +221,7 @@ static int live_sanitycheck(void *arg)
		return 0;

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);

	if (spinner_init(&spin, i915))
		goto err_unlock;
@@ -261,6 +262,7 @@ static int live_sanitycheck(void *arg)
	spinner_fini(&spin);
err_unlock:
	igt_flush_test(i915, I915_WAIT_LOCKED);
	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
}
@@ -278,6 +280,7 @@ static int live_preempt(void *arg)
		return 0;

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);

	if (spinner_init(&spin_hi, i915))
		goto err_unlock;
@@ -350,6 +353,7 @@ static int live_preempt(void *arg)
	spinner_fini(&spin_hi);
err_unlock:
	igt_flush_test(i915, I915_WAIT_LOCKED);
	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
}
@@ -368,6 +372,7 @@ static int live_late_preempt(void *arg)
		return 0;

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);

	if (spinner_init(&spin_hi, i915))
		goto err_unlock;
@@ -440,6 +445,7 @@ static int live_late_preempt(void *arg)
	spinner_fini(&spin_hi);
err_unlock:
	igt_flush_test(i915, I915_WAIT_LOCKED);
	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;

@@ -467,6 +473,7 @@ static int live_preempt_hang(void *arg)
		return 0;

	mutex_lock(&i915->drm.struct_mutex);
	intel_runtime_pm_get(i915);

	if (spinner_init(&spin_hi, i915))
		goto err_unlock;
@@ -561,6 +568,7 @@ static int live_preempt_hang(void *arg)
	spinner_fini(&spin_hi);
err_unlock:
	igt_flush_test(i915, I915_WAIT_LOCKED);
	intel_runtime_pm_put(i915);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
}
Loading