[bug report] drm/vc4: dsi: Fix bridge chain handling
Dan Carpenter
dan.carpenter at oracle.com
Wed Jun 24 19:11:37 UTC 2020
On Wed, Jun 24, 2020 at 08:30:25PM +0200, Boris Brezillon wrote:
> 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?
Yeah. I can do that tomorrow.
I'm working on a new Smatch check and so I wasn't super familiar with
some of these list_for_each() loops. Thanks!
regards,
dan carpenter
More information about the dri-devel
mailing list