[Intel-gfx] [PATCH v2 07/12] drm/msm: Handle drm_atomic_helper_swap_state failure
Daniel Vetter
daniel at ffwll.ch
Fri Jul 14 15:02:15 UTC 2017
On Tue, Jul 11, 2017 at 04:33:09PM +0200, Maarten Lankhorst wrote:
> drm_atomic_helper_swap_state() will be changed to interruptible waiting
> in the next few commits, so all drivers have to be changed to handling
> failure.
>
> MSM has its own busy tracking, which means the swap_state call can be
> done with stall = false, in which case it should never return an error.
> Handle failure with BUG_ON for this reason.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> Cc: Rob Clark <robdclark at gmail.com>
> Cc: linux-arm-msm at vger.kernel.org
> Cc: freedreno at lists.freedesktop.org
> ---
> drivers/gpu/drm/msm/msm_atomic.c | 16 ++++++++--------
> 1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c
> index 9633a68b14d7..badfa8717317 100644
> --- a/drivers/gpu/drm/msm/msm_atomic.c
> +++ b/drivers/gpu/drm/msm/msm_atomic.c
> @@ -232,20 +232,18 @@ int msm_atomic_commit(struct drm_device *dev,
> * mark our set of crtc's as busy:
> */
> ret = start_atomic(dev->dev_private, c->crtc_mask);
> - if (ret) {
> - kfree(c);
> - goto error;
> - }
> + if (ret)
> + goto err_free;
> +
> + BUG_ON(drm_atomic_helper_swap_state(state, false) < 0);
Hm, not sure we want to do this, makes switching msm to the nonblocking
helpers a bit more tricky. And the got err_free thing looks like leftovers
from an old version. But it's all correct.
Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
>
> /*
> * This is the point of no return - everything below never fails except
> * when the hw goes bonghits. Which means we can commit the new state on
> * the software side now.
> + *
> + * swap driver private state while still holding state_lock
> */
> -
> - drm_atomic_helper_swap_state(state, true);
> -
> - /* swap driver private state while still holding state_lock */
> if (to_kms_state(state)->state)
> priv->kms->funcs->swap_state(priv->kms, state);
>
> @@ -275,6 +273,8 @@ int msm_atomic_commit(struct drm_device *dev,
>
> return 0;
>
> +err_free:
> + kfree(c);
> error:
> drm_atomic_helper_cleanup_planes(dev, state);
> return ret;
> --
> 2.11.0
>
> _______________________________________________
> 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