On Tue, Jul 11, 2017 at 04:33:04PM +0200, Maarten Lankhorst wrote: > We want to change swap_state to wait indefinitely, but to do this > swap_state should wait interruptibly. This requires propagating > the error to each driver. > > Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > drivers/gpu/drm/drm_atomic_helper.c | 22 ++++++++++++++++------ > include/drm/drm_atomic_helper.h | 3 +-- > 2 files changed, 17 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 667ec97d4efb..bfb98fbd0e0e 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -1510,10 +1510,8 @@ int drm_atomic_helper_commit(struct drm_device *dev, > > if (!nonblock) { > ret = drm_atomic_helper_wait_for_fences(dev, state, true); > - if (ret) { > - drm_atomic_helper_cleanup_planes(dev, state); > - return ret; > - } > + if (ret) > + goto err; > } > > /* > @@ -1522,7 +1520,9 @@ int drm_atomic_helper_commit(struct drm_device *dev, > * the software side now. > */ > > - drm_atomic_helper_swap_state(state, true); > + ret = drm_atomic_helper_swap_state(state, true); > + if (ret) > + goto err; > > /* > * Everything below can be run asynchronously without the need to grab > @@ -1551,6 +1551,10 @@ int drm_atomic_helper_commit(struct drm_device *dev, > commit_tail(state); > > return 0; > + > +err: > + drm_atomic_helper_cleanup_planes(dev, state); > + return ret; > } > EXPORT_SYMBOL(drm_atomic_helper_commit); > > @@ -2254,8 +2258,12 @@ EXPORT_SYMBOL(drm_atomic_helper_cleanup_planes); > * the &drm_plane.state, &drm_crtc.state or &drm_connector.state pointer. With > * the current atomic helpers this is almost always the case, since the helpers > * don't pass the right state structures to the callbacks. > + * > + * Returns: > + * > + * Always returns 0, cannot fail yet. > */ > -void drm_atomic_helper_swap_state(struct drm_atomic_state *state, > +int drm_atomic_helper_swap_state(struct drm_atomic_state *state, > bool stall) > { > int i; > @@ -2332,6 +2340,8 @@ void drm_atomic_helper_swap_state(struct drm_atomic_state *state, > > __for_each_private_obj(state, obj, obj_state, i, funcs) > funcs->swap_state(obj, &state->private_objs[i].obj_state); > + > + return 0; > } > EXPORT_SYMBOL(drm_atomic_helper_swap_state); > > diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h > index dd196cc0afd7..37c9534ff691 100644 > --- a/include/drm/drm_atomic_helper.h > +++ b/include/drm/drm_atomic_helper.h > @@ -84,8 +84,7 @@ void > drm_atomic_helper_disable_planes_on_crtc(struct drm_crtc_state *old_crtc_state, > bool atomic); > > -void drm_atomic_helper_swap_state(struct drm_atomic_state *state, > - bool stall); > +int drm_atomic_helper_swap_state(struct drm_atomic_state *state, bool stall); > > /* nonblocking commit helpers */ > int drm_atomic_helper_setup_commit(struct drm_atomic_state *state, > -- > 2.11.0 > > _______________________________________________ > 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 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel