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@xxxxxxxxxxxxxxx> > --- > 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@xxxxxxxx> > + 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@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx