[Intel-gfx] [PATCH] drm/i915: Do not use lock all in hsw_trans_edp_pipe_A_crc_wa

Daniel Vetter daniel at ffwll.ch
Wed Apr 12 08:55:41 UTC 2017


On Tue, Apr 04, 2017 at 03:24:57PM +0200, Maarten Lankhorst wrote:
> There is no need to acquire all locks here,
> doing a commit after forcing a modeset on the affected crtc
> is enough. Any other locks needed will be acquired as needed.
> 
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_pipe_crc.c | 17 ++++++++++++++---
>  1 file changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c
> index 9fd9c70baeed..647426c75b0a 100644
> --- a/drivers/gpu/drm/i915/intel_pipe_crc.c
> +++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
> @@ -513,16 +513,20 @@ static void hsw_trans_edp_pipe_A_crc_wa(struct drm_i915_private *dev_priv,
>  	struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, PIPE_A);
>  	struct intel_crtc_state *pipe_config;
>  	struct drm_atomic_state *state;
> +	struct drm_modeset_acquire_ctx ctx;
>  	int ret = 0;
>  
> -	drm_modeset_lock_all(dev);
> +	drm_modeset_acquire_init(&ctx, 0);
> +
>  	state = drm_atomic_state_alloc(dev);
>  	if (!state) {
>  		ret = -ENOMEM;
>  		goto unlock;
>  	}
>  
> -	state->acquire_ctx = drm_modeset_legacy_acquire_ctx(&crtc->base);
> +	state->acquire_ctx = &ctx;
> +
> +retry:
>  	pipe_config = intel_atomic_get_crtc_state(state, crtc);
>  	if (IS_ERR(pipe_config)) {
>  		ret = PTR_ERR(pipe_config);
> @@ -537,10 +541,17 @@ static void hsw_trans_edp_pipe_A_crc_wa(struct drm_i915_private *dev_priv,
>  	ret = drm_atomic_commit(state);
>  
>  put_state:
> +	if (ret == -EDEADLK) {
> +		drm_atomic_state_clear(state);

Random idea of the day: Should we treat the atomic state like a special ww
mutex to make sure it's properly cleared when we drop the locks? Not sure
that's feasible, reasonable and how badly it'd break the suspend/resume
helpers, but would be good to make sure we always clear the state before
dropping locks.

Anyway, that idea aside, patch lgtm.

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

> +		drm_modeset_backoff(&ctx);
> +		goto retry;
> +	}
> +
>  	drm_atomic_state_put(state);
>  unlock:
>  	WARN(ret, "Toggling workaround to %i returns %i\n", enable, ret);
> -	drm_modeset_unlock_all(dev);
> +	drm_modeset_drop_locks(&ctx);
> +	drm_modeset_acquire_fini(&ctx);
>  }
>  
>  static int ivb_pipe_crc_ctl_reg(struct drm_i915_private *dev_priv,
> -- 
> 2.7.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the Intel-gfx mailing list