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

Commit bf2f0436 authored by Mika Kuoppala's avatar Mika Kuoppala Committed by Chris Wilson
Browse files

drm/i915: Introduce engine_stalled helper



Move the engine stalled/pardoned check into a helper function.

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1484668747-9120-4-git-send-email-mika.kuoppala@intel.com


Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 211b12af
Loading
Loading
Loading
Loading
+15 −10
Original line number Original line Diff line number Diff line
@@ -2611,6 +2611,20 @@ i915_gem_find_active_request(struct intel_engine_cs *engine)
	return NULL;
	return NULL;
}
}


static bool engine_stalled(struct intel_engine_cs *engine)
{
	if (!engine->hangcheck.stalled)
		return false;

	/* Check for possible seqno movement after hang declaration */
	if (engine->hangcheck.seqno != intel_engine_get_seqno(engine)) {
		DRM_DEBUG_DRIVER("%s pardoned\n", engine->name);
		return false;
	}

	return true;
}

void i915_gem_reset_prepare(struct drm_i915_private *dev_priv)
void i915_gem_reset_prepare(struct drm_i915_private *dev_priv)
{
{
	struct intel_engine_cs *engine;
	struct intel_engine_cs *engine;
@@ -2669,7 +2683,6 @@ static void i915_gem_reset_engine(struct intel_engine_cs *engine)
{
{
	struct drm_i915_gem_request *request;
	struct drm_i915_gem_request *request;
	struct i915_gem_context *hung_ctx;
	struct i915_gem_context *hung_ctx;
	bool ring_hung;


	if (engine->irq_seqno_barrier)
	if (engine->irq_seqno_barrier)
		engine->irq_seqno_barrier(engine);
		engine->irq_seqno_barrier(engine);
@@ -2680,15 +2693,7 @@ static void i915_gem_reset_engine(struct intel_engine_cs *engine)


	hung_ctx = request->ctx;
	hung_ctx = request->ctx;


	ring_hung = engine->hangcheck.stalled;
	if (engine_stalled(engine)) {
	if (engine->hangcheck.seqno != intel_engine_get_seqno(engine)) {
		DRM_DEBUG_DRIVER("%s pardoned, was guilty? %s\n",
				 engine->name,
				 yesno(ring_hung));
		ring_hung = false;
	}

	if (ring_hung) {
		i915_gem_context_mark_guilty(hung_ctx);
		i915_gem_context_mark_guilty(hung_ctx);
		skip_request(request);
		skip_request(request);
	} else {
	} else {