[Freedreno] [PATCH 07/12] drm/msm: Handle drm_atomic_helper_swap_state failure
Archit Taneja
architt at codeaurora.org
Wed Jul 19 09:24:15 UTC 2017
On 07/19/2017 01:10 PM, 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.
>
Applied #2/12 and tried this out.
Tested-by: Archit Taneja <architt at codeaurora.org>
> 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
> Link: http://patchwork.freedesktop.org/patch/msgid/20170711143314.2148-8-maarten.lankhorst@linux.intel.com
> Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> Reviewed-by: Sean Paul <seanpaul at chromium.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);
>
> /*
> * 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;
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
More information about the Freedreno
mailing list