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.lankho...@linux.intel.com>
> Cc: Rob Clark <robdcl...@gmail.com>
> Cc: linux-arm-...@vger.kernel.org
> Cc: freedreno@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.vet...@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-...@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno

Reply via email to