Hi Daniel,

Thank you for the patch.

This looks good to me as the resulting code is mostly similar. However, the 
for_each_*_in_state macros end with an for_each_if() that tests if the 
object's state is NULL, which isn't present in this code. I'm wondering 
whether that was an oversight on my side possibly leading to a crash when 
dereferencing a NULL state, or an unneeded check in the macros. Can 
atomic_state->*_states[i] be NULL if atomic_state->*[i] is not NULL ?

On Sunday 29 May 2016 20:35:01 Daniel Vetter wrote:
> We want to hide drm_atomic_state internals better.
> 
> Cc: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
> Signed-off-by: Daniel Vetter <daniel.vet...@intel.com>
> ---
>  drivers/gpu/drm/rcar-du/rcar_du_kms.c   |  8 ++++----
>  drivers/gpu/drm/rcar-du/rcar_du_plane.c | 20 ++++++++------------
>  2 files changed, 12 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index e70a4f33d970..f315c55c1f65
> 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> @@ -288,6 +288,8 @@ static int rcar_du_atomic_commit(struct drm_device *dev,
> {
>       struct rcar_du_device *rcdu = dev->dev_private;
>       struct rcar_du_commit *commit;
> +     struct drm_crtc *crtc;
> +     struct drm_crtc_state *crtc_state;
>       unsigned int i;
>       int ret;
> 
> @@ -309,10 +311,8 @@ static int rcar_du_atomic_commit(struct drm_device
> *dev, /* Wait until all affected CRTCs have completed previous commits and
> * mark them as pending.
>        */
> -     for (i = 0; i < dev->mode_config.num_crtc; ++i) {
> -             if (state->crtcs[i])
> -                     commit->crtcs |= 1 << drm_crtc_index(state->crtcs[i]);
> -     }
> +     for_each_crtc_in_state(state, crtc, crtc_state, i)
> +             commit->crtcs |= 1 << drm_crtc_index(crtc);
> 
>       spin_lock(&rcdu->commit.wait.lock);
>       ret = wait_event_interruptible_locked(rcdu->commit.wait,
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> b/drivers/gpu/drm/rcar-du/rcar_du_plane.c index d445e67f78e1..bfe31ca870cc
> 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> @@ -140,18 +140,17 @@ int rcar_du_atomic_check_planes(struct drm_device
> *dev, bool needs_realloc = false;
>       unsigned int groups = 0;
>       unsigned int i;
> +     struct drm_plane *drm_plane;
> +     struct drm_plane_state *drm_plane_state;
> 
>       /* Check if hardware planes need to be reallocated. */
> -     for (i = 0; i < dev->mode_config.num_total_plane; ++i) {
> +     for_each_plane_in_state(state, drm_plane, drm_plane_state, i) {
>               struct rcar_du_plane_state *plane_state;
>               struct rcar_du_plane *plane;
>               unsigned int index;
> 
> -             if (!state->planes[i])
> -                     continue;
> -
> -             plane = to_rcar_plane(state->planes[i]);
> -             plane_state = to_rcar_plane_state(state->plane_states[i]);
> +             plane = to_rcar_plane(drm_plane);
> +             plane_state = to_rcar_plane_state(drm_plane_state);
> 
>               dev_dbg(rcdu->dev, "%s: checking plane (%u,%tu)\n", __func__,
>                       plane->group->index, plane - plane->group->planes);
> @@ -247,18 +246,15 @@ int rcar_du_atomic_check_planes(struct drm_device
> *dev, }
> 
>       /* Reallocate hardware planes for each plane that needs it. */
> -     for (i = 0; i < dev->mode_config.num_total_plane; ++i) {
> +     for_each_plane_in_state(state, drm_plane, drm_plane_state, i) {
>               struct rcar_du_plane_state *plane_state;
>               struct rcar_du_plane *plane;
>               unsigned int crtc_planes;
>               unsigned int free;
>               int idx;
> 
> -             if (!state->planes[i])
> -                     continue;
> -
> -             plane = to_rcar_plane(state->planes[i]);
> -             plane_state = to_rcar_plane_state(state->plane_states[i]);
> +             plane = to_rcar_plane(drm_plane);
> +             plane_state = to_rcar_plane_state(drm_plane_state);
> 
>               dev_dbg(rcdu->dev, "%s: allocating plane (%u,%tu)\n", __func__,
>                       plane->group->index, plane - plane->group->planes);

-- 
Regards,

Laurent Pinchart

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to