[bug report] drm/vc4: dsi: Fix bridge chain handling

Boris Brezillon boris.brezillon at collabora.com
Wed Jun 24 18:30:25 UTC 2020


Hello Dan,

On Wed, 24 Jun 2020 20:58:06 +0300
Dan Carpenter <dan.carpenter at oracle.com> wrote:

> Hello Boris Brezillon,
> 
> The patch 033bfe7538a1: "drm/vc4: dsi: Fix bridge chain handling"
> from Dec 27, 2019, leads to the following static checker warning:
> 
> 	drivers/gpu/drm/vc4/vc4_dsi.c:758 vc4_dsi_encoder_disable()
> 	warn: iterator used outside loop: 'iter'
> 
> drivers/gpu/drm/vc4/vc4_dsi.c
>    743  static void vc4_dsi_encoder_disable(struct drm_encoder *encoder)
>    744  {
>    745          struct vc4_dsi_encoder *vc4_encoder = to_vc4_dsi_encoder(encoder);
>    746          struct vc4_dsi *dsi = vc4_encoder->dsi;
>    747          struct device *dev = &dsi->pdev->dev;
>    748          struct drm_bridge *iter;
>    749  
>    750          list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
>    751                  if (iter->funcs->disable)
>    752                          iter->funcs->disable(iter);
>    753          }
> 
> This loops backwards until iter is parked on the list head.
> 
>    754  
>    755          vc4_dsi_ulps(dsi, true);
>    756  
>    757          list_for_each_entry_from(iter, &dsi->bridge_chain, chain_node) {
> 
> But then this "continues" until the iter is parked on the list head.
> Since we ended with the iterator already on the list head then we never
> enter this loop and it is a no-op.
> 
> Am I missing something?

It should definitely be list_for_each_entry() here. Thanks for
this report. Would you mind sending a patch?

Regards,

Boris


More information about the dri-devel mailing list