[Intel-gfx] [PATCH 12/19] drm/msm: Use new atomic iterator macros

Ville Syrjälä ville.syrjala at linux.intel.com
Thu Nov 3 16:37:06 UTC 2016


On Mon, Oct 17, 2016 at 02:37:11PM +0200, Maarten Lankhorst wrote:
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> ---
>  drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c   |  4 ++--
>  drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c   |  6 +++---
>  drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h   |  3 ++-
>  drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c |  4 ++--
>  drivers/gpu/drm/msm/msm_atomic.c          | 16 ++++++++--------
>  5 files changed, 17 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
> index 571a91ee9607..d18d0a0e0a35 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
> @@ -113,7 +113,7 @@ static void mdp4_prepare_commit(struct msm_kms *kms, struct drm_atomic_state *st
>  	mdp4_enable(mdp4_kms);
>  
>  	/* see 119ecb7fd */
> -	for_each_crtc_in_state(state, crtc, crtc_state, i)
> +	for_each_new_crtc_in_state(state, crtc, crtc_state, i)
>  		drm_crtc_vblank_get(crtc);
>  }
>  
> @@ -125,7 +125,7 @@ static void mdp4_complete_commit(struct msm_kms *kms, struct drm_atomic_state *s
>  	struct drm_crtc_state *crtc_state;
>  
>  	/* see 119ecb7fd */
> -	for_each_crtc_in_state(state, crtc, crtc_state, i)
> +	for_each_new_crtc_in_state(state, crtc, crtc_state, i)
>  		drm_crtc_vblank_put(crtc);

post-swap, but crtc_state not used in either. So lgtm.

I wonder if you should go all in and try to rename all the foo_state variables
as new_foo_state and old_foo_state to make sure you didn't miss any uses which
might not agree with your new choice if iterator macro? Eg. if in this
case crtc_state was actually used but you failed notice it you would have
just broken something by using the _new_ iterator.

>  
>  	mdp4_disable(mdp4_kms);
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
> index ed7143d35b25..7cfeb0455039 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
> @@ -82,10 +82,10 @@ static void mdp5_complete_commit(struct msm_kms *kms, struct drm_atomic_state *s
>  	int i;
>  	struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms));
>  	struct drm_plane *plane;
> -	struct drm_plane_state *plane_state;
> +	struct drm_plane_state *old_state, *new_state;
>  
> -	for_each_plane_in_state(state, plane, plane_state, i)
> -		mdp5_plane_complete_commit(plane, plane_state);
> +	for_each_oldnew_plane_in_state(state, plane, old_state, new_state, i)
> +		mdp5_plane_complete_commit(plane, old_state, new_state);
>  
>  	mdp5_disable(mdp5_kms);
>  }
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
> index 03738927be10..90e80619fc54 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
> @@ -198,7 +198,8 @@ void mdp5_irq_domain_fini(struct mdp5_kms *mdp5_kms);
>  uint32_t mdp5_plane_get_flush(struct drm_plane *plane);
>  void mdp5_plane_complete_flip(struct drm_plane *plane);
>  void mdp5_plane_complete_commit(struct drm_plane *plane,
> -	struct drm_plane_state *state);
> +	struct drm_plane_state *old_state,
> +	struct drm_plane_state *new_state);
>  enum mdp5_pipe mdp5_plane_pipe(struct drm_plane *plane);
>  struct drm_plane *mdp5_plane_init(struct drm_device *dev,
>  		enum mdp5_pipe pipe, bool private_plane,
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> index 951c002b05df..19c44b968f4e 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> @@ -859,13 +859,13 @@ uint32_t mdp5_plane_get_flush(struct drm_plane *plane)
>  
>  /* called after vsync in thread context */
>  void mdp5_plane_complete_commit(struct drm_plane *plane,
> -	struct drm_plane_state *state)
> +	struct drm_plane_state *old_state, struct drm_plane_state *new_state)
>  {
>  	struct mdp5_kms *mdp5_kms = get_kms(plane);
>  	struct mdp5_plane *mdp5_plane = to_mdp5_plane(plane);
>  	enum mdp5_pipe pipe = mdp5_plane->pipe;
>  
> -	if (!plane_enabled(plane->state) && mdp5_kms->smp) {
> +	if (!plane_enabled(new_state) && mdp5_kms->smp) {
>  		DBG("%s: free SMP", mdp5_plane->name);
>  		mdp5_smp_release(mdp5_kms->smp, pipe);
>  	}

Doesn't look like this guy actually needs the old state. Not sure why it
was getting passed in. The replacement for plane->state looks correct
nonetheless.

> diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c
> index db193f835298..333c379e6561 100644
> --- a/drivers/gpu/drm/msm/msm_atomic.c
> +++ b/drivers/gpu/drm/msm/msm_atomic.c
> @@ -89,8 +89,8 @@ static void msm_atomic_wait_for_commit_done(struct drm_device *dev,
>  	struct msm_kms *kms = priv->kms;
>  	int i;
>  
> -	for_each_crtc_in_state(old_state, crtc, crtc_state, i) {
> -		if (!crtc->state->enable)
> +	for_each_new_crtc_in_state(old_state, crtc, crtc_state, i) {
> +		if (!crtc_state->enable)
>  			continue;

post-swap, lgtm.

>  
>  		/* Legacy cursor ioctls are completely unsynced, and userspace
> @@ -191,7 +191,7 @@ int msm_atomic_commit(struct drm_device *dev,
>  	struct drm_crtc *crtc;
>  	struct drm_crtc_state *crtc_state;
>  	struct drm_plane *plane;
> -	struct drm_plane_state *plane_state;
> +	struct drm_plane_state *new_plane_state, *old_plane_state;
>  	int i, ret;
>  
>  	ret = drm_atomic_helper_prepare_planes(dev, state);
> @@ -207,18 +207,18 @@ int msm_atomic_commit(struct drm_device *dev,
>  	/*
>  	 * Figure out what crtcs we have:
>  	 */
> -	for_each_crtc_in_state(state, crtc, crtc_state, i)
> +	for_each_new_crtc_in_state(state, crtc, crtc_state, i)
>  		c->crtc_mask |= drm_crtc_mask(crtc);
>  
>  	/*
>  	 * Figure out what fence to wait for:
>  	 */
> -	for_each_plane_in_state(state, plane, plane_state, i) {
> -		if ((plane->state->fb != plane_state->fb) && plane_state->fb) {
> -			struct drm_gem_object *obj = msm_framebuffer_bo(plane_state->fb, 0);
> +	for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, i) {
> +		if (old_plane_state->fb != new_plane_state->fb && new_plane_state->fb) {
> +			struct drm_gem_object *obj = msm_framebuffer_bo(new_plane_state->fb, 0);
>  			struct msm_gem_object *msm_obj = to_msm_bo(obj);
>  
> -			plane_state->fence = reservation_object_get_excl_rcu(msm_obj->resv);
> +			new_plane_state->fence = reservation_object_get_excl_rcu(msm_obj->resv);
>  		}

pre-swap, lgtm.

Patches 08-12
Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

>  	}
>  
> -- 
> 2.7.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel OTC


More information about the dri-devel mailing list