Hi Laurent,

On 26/02/18 21:45, Laurent Pinchart wrote:
> The DRM pipeline handling code uses the entity's pipe list head to check
> whether the entity is already included in a pipeline. This method is a
> bit fragile in the sense that it uses list_empty() on a list_head that
> is a list member. Replace it by a simpler check for the entity pipe
> pointer.

Yes, excellent.

> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart+rene...@ideasonboard.com>

Reviewed-by: Kieran Bingham <kieran.bingham+rene...@ideasonboard.com>

> ---
>  drivers/media/platform/vsp1/vsp1_drm.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/media/platform/vsp1/vsp1_drm.c 
> b/drivers/media/platform/vsp1/vsp1_drm.c
> index a7ad85ab0b08..e210917fdc3f 100644
> --- a/drivers/media/platform/vsp1/vsp1_drm.c
> +++ b/drivers/media/platform/vsp1/vsp1_drm.c
> @@ -119,9 +119,9 @@ int vsp1_du_setup_lif(struct device *dev, unsigned int 
> pipe_index,
>                        * Remove the RPF from the pipe and the list of BRU
>                        * inputs.
>                        */
> -                     WARN_ON(list_empty(&rpf->entity.list_pipe));
> +                     WARN_ON(!rpf->entity.pipe);

Does this WARN_ON() have much value any more ?

I think it could probably be removed... unless there is a race between potential
calls through vsp1_du_atomic_flush() and vsp1_du_setup_lif() - but I would be
very surprised if that wasn't protected at the DRM levels.

 (Removing it if chosen doesn't need to be in this patch though)

>                       rpf->entity.pipe = NULL;
> -                     list_del_init(&rpf->entity.list_pipe);
> +                     list_del(&rpf->entity.list_pipe);
>                       pipe->inputs[i] = NULL;
>  
>                       bru->inputs[rpf->bru_input].rpf = NULL;
> @@ -537,7 +537,7 @@ void vsp1_du_atomic_flush(struct device *dev, unsigned 
> int pipe_index)
>                       continue;
>               }
>  
> -             if (list_empty(&rpf->entity.list_pipe)) {
> +             if (!rpf->entity.pipe) {
>                       rpf->entity.pipe = pipe;
>                       list_add_tail(&rpf->entity.list_pipe, &pipe->entities);
>               }
> @@ -566,7 +566,7 @@ void vsp1_du_atomic_flush(struct device *dev, unsigned 
> int pipe_index)
>                                          VI6_DPR_NODE_UNUSED);
>  
>                       entity->pipe = NULL;
> -                     list_del_init(&entity->list_pipe);
> +                     list_del(&entity->list_pipe);
>  
>                       continue;
>               }
> 

Reply via email to