Message ID | 20170529193409.18752-1-daniel.vetter@ffwll.ch (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hey, Op 29-05-17 om 21:34 schreef Daniel Vetter: > In the conversion to drop drm_modeset_lock_all and the magic implicit > context I failed to realize that _resume starts out with a pile of > state copies, but not with the locks. And hence drm_atomic_commit > won't grab these for us. > > Cc: Jyri Sarha <jsarha@ti.com> > Fixes: a5b8444e289c ("drm/atomic-helper: remove modeset_lock_all from helper_resume") > Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> > Cc: Daniel Vetter <daniel.vetter@intel.com> > Cc: Jani Nikula <jani.nikula@linux.intel.com> > Cc: Sean Paul <seanpaul@chromium.org> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> > --- > Needs to be applied to drm-misc-fixes for 4.12. > -Daniel > --- > drivers/gpu/drm/drm_atomic_helper.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index af07368846e0..a61291c29567 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -2669,7 +2669,12 @@ int drm_atomic_helper_resume(struct drm_device *dev, > > drm_modeset_acquire_init(&ctx, 0); > while (1) { > + err = drm_modeset_lock_all_ctx(dev, &ctx); > + if (err) > + goto out; > + > err = drm_atomic_helper_commit_duplicated_state(state, &ctx); > +out: > if (err != -EDEADLK) > break; > This either needs a WARN somewhere to make sure we trip this in the core, or a big scary comment on why this is needed. If fixed, Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index af07368846e0..a61291c29567 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -2669,7 +2669,12 @@ int drm_atomic_helper_resume(struct drm_device *dev, drm_modeset_acquire_init(&ctx, 0); while (1) { + err = drm_modeset_lock_all_ctx(dev, &ctx); + if (err) + goto out; + err = drm_atomic_helper_commit_duplicated_state(state, &ctx); +out: if (err != -EDEADLK) break;
In the conversion to drop drm_modeset_lock_all and the magic implicit context I failed to realize that _resume starts out with a pile of state copies, but not with the locks. And hence drm_atomic_commit won't grab these for us. Cc: Jyri Sarha <jsarha@ti.com> Fixes: a5b8444e289c ("drm/atomic-helper: remove modeset_lock_all from helper_resume") Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Cc: Daniel Vetter <daniel.vetter@intel.com> Cc: Jani Nikula <jani.nikula@linux.intel.com> Cc: Sean Paul <seanpaul@chromium.org> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> --- Needs to be applied to drm-misc-fixes for 4.12. -Daniel --- drivers/gpu/drm/drm_atomic_helper.c | 5 +++++ 1 file changed, 5 insertions(+)