[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