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

drm/i915/selftests: Common live setup/teardown



We frequently, but not frequently enough!, remember to flush residual
operations and objects at the end of a live subtest. The purpose is to
cleanup after every subtest, leaving a clean slate for the next subtest,
and perform early detection of leaky state. As this should ideally be
common for all live subtests, pull the task into a common teardown
routine.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190703091726.11690-1-chris@chris-wilson.co.uk
parent 8e9ecb3e
Loading
Loading
Loading
Loading
+3 −8
Original line number Diff line number Diff line
@@ -11,8 +11,8 @@

static int igt_client_fill(void *arg)
{
	struct intel_context *ce = arg;
	struct drm_i915_private *i915 = ce->gem_context->i915;
	struct drm_i915_private *i915 = arg;
	struct intel_context *ce = i915->engine[BCS0]->kernel_context;
	struct drm_i915_gem_object *obj;
	struct rnd_state prng;
	IGT_TIMEOUT(end);
@@ -89,11 +89,6 @@ err_unpin:
err_put:
	i915_gem_object_put(obj);
err_flush:
	mutex_lock(&i915->drm.struct_mutex);
	if (igt_flush_test(i915, I915_WAIT_LOCKED))
		err = -EIO;
	mutex_unlock(&i915->drm.struct_mutex);

	if (err == -ENOMEM)
		err = 0;

@@ -112,5 +107,5 @@ int i915_gem_client_blt_live_selftests(struct drm_i915_private *i915)
	if (!HAS_ENGINE(i915, BCS0))
		return 0;

	return i915_subtests(tests, i915->engine[BCS0]->kernel_context);
	return i915_live_subtests(tests, i915);
}
+1 −1
Original line number Diff line number Diff line
@@ -1731,5 +1731,5 @@ int i915_gem_context_live_selftests(struct drm_i915_private *dev_priv)
	if (i915_terminally_wedged(dev_priv))
		return 0;

	return i915_subtests(tests, dev_priv);
	return i915_live_subtests(tests, dev_priv);
}
+3 −8
Original line number Diff line number Diff line
@@ -11,8 +11,8 @@

static int igt_fill_blt(void *arg)
{
	struct intel_context *ce = arg;
	struct drm_i915_private *i915 = ce->gem_context->i915;
	struct drm_i915_private *i915 = arg;
	struct intel_context *ce = i915->engine[BCS0]->kernel_context;
	struct drm_i915_gem_object *obj;
	struct rnd_state prng;
	IGT_TIMEOUT(end);
@@ -83,11 +83,6 @@ err_unpin:
err_put:
	i915_gem_object_put(obj);
err_flush:
	mutex_lock(&i915->drm.struct_mutex);
	if (igt_flush_test(i915, I915_WAIT_LOCKED))
		err = -EIO;
	mutex_unlock(&i915->drm.struct_mutex);

	if (err == -ENOMEM)
		err = 0;

@@ -106,5 +101,5 @@ int i915_gem_object_blt_live_selftests(struct drm_i915_private *i915)
	if (!HAS_ENGINE(i915, BCS0))
		return 0;

	return i915_subtests(tests, i915->engine[BCS0]->kernel_context);
	return i915_live_subtests(tests, i915);
}
+1 −1
Original line number Diff line number Diff line
@@ -1744,7 +1744,7 @@ int intel_hangcheck_live_selftests(struct drm_i915_private *i915)
	saved_hangcheck = fetch_and_zero(&i915_modparams.enable_hangcheck);
	drain_delayed_work(&i915->gpu_error.hangcheck_work); /* flush param */

	err = i915_subtests(tests, i915);
	err = i915_live_subtests(tests, i915);

	mutex_lock(&i915->drm.struct_mutex);
	igt_flush_test(i915, I915_WAIT_LOCKED);
+1 −15
Original line number Diff line number Diff line
@@ -73,7 +73,6 @@ err_ctx:
err_spin:
	igt_spinner_fini(&spin);
err_unlock:
	igt_flush_test(i915, I915_WAIT_LOCKED);
	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
@@ -290,8 +289,6 @@ err_map:
err_obj:
	i915_gem_object_put(obj);
err_unlock:
	if (igt_flush_test(i915, I915_WAIT_LOCKED))
		err = -EIO;
	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
	mutex_unlock(&i915->drm.struct_mutex);

@@ -472,8 +469,6 @@ err_ctx_lo:
err_ctx_hi:
	kernel_context_close(ctx_hi);
err_unlock:
	if (igt_flush_test(i915, I915_WAIT_LOCKED))
		err = -EIO;
	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
@@ -580,7 +575,6 @@ err_spin_lo:
err_spin_hi:
	igt_spinner_fini(&spin_hi);
err_unlock:
	igt_flush_test(i915, I915_WAIT_LOCKED);
	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
@@ -687,7 +681,6 @@ err_spin_lo:
err_spin_hi:
	igt_spinner_fini(&spin_hi);
err_unlock:
	igt_flush_test(i915, I915_WAIT_LOCKED);
	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
@@ -826,8 +819,6 @@ err_client_b:
err_client_a:
	preempt_client_fini(&a);
err_unlock:
	if (igt_flush_test(i915, I915_WAIT_LOCKED))
		err = -EIO;
	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
@@ -995,8 +986,6 @@ err_client_1:
err_client_0:
	preempt_client_fini(&client[0]);
err_unlock:
	if (igt_flush_test(i915, I915_WAIT_LOCKED))
		err = -EIO;
	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
@@ -1143,8 +1132,6 @@ err_client_lo:
err_client_hi:
	preempt_client_fini(&hi);
err_unlock:
	if (igt_flush_test(i915, I915_WAIT_LOCKED))
		err = -EIO;
	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
@@ -1270,7 +1257,6 @@ err_spin_lo:
err_spin_hi:
	igt_spinner_fini(&spin_hi);
err_unlock:
	igt_flush_test(i915, I915_WAIT_LOCKED);
	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
	mutex_unlock(&i915->drm.struct_mutex);
	return err;
@@ -2054,5 +2040,5 @@ int intel_execlists_live_selftests(struct drm_i915_private *i915)
	if (i915_terminally_wedged(i915))
		return 0;

	return i915_subtests(tests, i915);
	return i915_live_subtests(tests, i915);
}
Loading