[Intel-gfx] [PATCH 11/40] drm/i915/execlists: Onion unwind for logical_ring_init() failure

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Thu Sep 20 14:21:47 UTC 2018


On 19/09/2018 20:55, Chris Wilson wrote:
> Fix up the error unwind for logical_ring_init() failing by moving the

Could you say in the commit what was broken?

Regards,

Tvrtko

> cleanup into the callers who own the various bits of state during
> initialisation.
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>   drivers/gpu/drm/i915/intel_lrc.c | 18 +++++++++++-------
>   1 file changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index b4448b05d78a..3edb417caa7b 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -2415,7 +2415,7 @@ static int logical_ring_init(struct intel_engine_cs *engine)
>   
>   	ret = intel_engine_init_common(engine);
>   	if (ret)
> -		goto error;
> +		return ret;
>   
>   	if (HAS_LOGICAL_RING_ELSQ(i915)) {
>   		execlists->submit_reg = i915->regs +
> @@ -2457,10 +2457,6 @@ static int logical_ring_init(struct intel_engine_cs *engine)
>   	reset_csb_pointers(execlists);
>   
>   	return 0;
> -
> -error:
> -	intel_logical_ring_cleanup(engine);
> -	return ret;
>   }
>   
>   int logical_render_ring_init(struct intel_engine_cs *engine)
> @@ -2483,10 +2479,14 @@ int logical_render_ring_init(struct intel_engine_cs *engine)
>   	engine->emit_breadcrumb = gen8_emit_breadcrumb_rcs;
>   	engine->emit_breadcrumb_sz = gen8_emit_breadcrumb_rcs_sz;
>   
> -	ret = intel_engine_create_scratch(engine, PAGE_SIZE);
> +	ret = logical_ring_init(engine);
>   	if (ret)
>   		return ret;
>   
> +	ret = intel_engine_create_scratch(engine, PAGE_SIZE);
> +	if (ret)
> +		goto err_cleanup_common;
> +
>   	ret = intel_init_workaround_bb(engine);
>   	if (ret) {
>   		/*
> @@ -2498,7 +2498,11 @@ int logical_render_ring_init(struct intel_engine_cs *engine)
>   			  ret);
>   	}
>   
> -	return logical_ring_init(engine);
> +	return 0;
> +
> +err_cleanup_common:
> +	intel_engine_cleanup_common(engine);
> +	return ret;
>   }
>   
>   int logical_xcs_ring_init(struct intel_engine_cs *engine)
> 


More information about the Intel-gfx mailing list