diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gpu_error.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gpu_error.c | 33 | 
1 files changed, 6 insertions, 27 deletions
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c index 9d5d5a397b64..b20bd6365615 100644 --- a/drivers/gpu/drm/i915/i915_gpu_error.c +++ b/drivers/gpu/drm/i915/i915_gpu_error.c @@ -1596,43 +1596,20 @@ capture_engine(struct intel_engine_cs *engine,  {  	struct intel_engine_capture_vma *capture = NULL;  	struct intel_engine_coredump *ee; -	struct intel_context *ce; +	struct intel_context *ce = NULL;  	struct i915_request *rq = NULL; -	unsigned long flags;  	ee = intel_engine_coredump_alloc(engine, ALLOW_FAIL, dump_flags);  	if (!ee)  		return NULL; -	ce = intel_engine_get_hung_context(engine); -	if (ce) { -		intel_engine_clear_hung_context(engine); -		rq = intel_context_find_active_request(ce); -		if (!rq || !i915_request_started(rq)) -			goto no_request_capture; -	} else { -		/* -		 * Getting here with GuC enabled means it is a forced error capture -		 * with no actual hang. So, no need to attempt the execlist search. -		 */ -		if (!intel_uc_uses_guc_submission(&engine->gt->uc)) { -			spin_lock_irqsave(&engine->sched_engine->lock, flags); -			rq = intel_engine_execlist_find_hung_request(engine); -			spin_unlock_irqrestore(&engine->sched_engine->lock, -					       flags); -		} -	} -	if (rq) -		rq = i915_request_get_rcu(rq); - -	if (!rq) +	intel_engine_get_hung_entity(engine, &ce, &rq); +	if (!rq || !i915_request_started(rq))  		goto no_request_capture;  	capture = intel_engine_coredump_add_request(ee, rq, ATOMIC_MAYFAIL); -	if (!capture) { -		i915_request_put(rq); +	if (!capture)  		goto no_request_capture; -	}  	if (dump_flags & CORE_DUMP_FLAG_IS_GUC_CAPTURE)  		intel_guc_capture_get_matching_node(engine->gt, ee, ce); @@ -1642,6 +1619,8 @@ capture_engine(struct intel_engine_cs *engine,  	return ee;  no_request_capture: +	if (rq) +		i915_request_put(rq);  	kfree(ee);  	return NULL;  }  | 
