Message ID | 20220406113143.10699-1-xiam0nd.tong@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] drm/gma500: fix a potential repeat execution in psb_driver_load | expand |
On Wed, Apr 6, 2022 at 1:31 PM Xiaomeng Tong <xiam0nd.tong@gmail.com> wrote: > > Instead of exiting the loop as expected when an entry is found, the > list_for_each_entry() continues until the traversal is complete. To > avoid potential executing 'ret = gma_backlight_init(dev);' repeatly, > goto outside the loop when the entry is found. > > Signed-off-by: Xiaomeng Tong <xiam0nd.tong@gmail.com> > --- > > changes since v1: > - goto outside the loop (Xiaomeng Tong) > > v1: https://lore.kernel.org/lkml/20220401115811.9656-1-xiam0nd.tong@gmail.com/ > > --- > drivers/gpu/drm/gma500/psb_drv.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c > index 2aff54d505e2..929fd47548b4 100644 > --- a/drivers/gpu/drm/gma500/psb_drv.c > +++ b/drivers/gpu/drm/gma500/psb_drv.c > @@ -400,9 +400,10 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags) > case INTEL_OUTPUT_LVDS: > case INTEL_OUTPUT_MIPI: > ret = gma_backlight_init(dev); > - break; > + goto out; > } > } > +out: > drm_connector_list_iter_end(&conn_iter); Hi, This would work but using gotos like this easily turns the code into spaghetti. See "7. Centralized exiting of functions" in Documentation/process/coding-style.rst for when to use gotos. In this particular case I think we are better off using an if-statement. What about something like this: if (gma_encoder->type == INTEL_OUTPUT_LVDS || gma_encoder->type == INTEL_OUTPUT_MIPI) { ret = gma_backlight_init(); break; } -Patrik > > if (ret) > -- > 2.17.1 >
On Tue, 12 Apr 2022 16:58:24 +0200, Patrik Jakobsson wrote: > Hi, > This would work but using gotos like this easily turns the code into > spaghetti. See "7. Centralized exiting of functions" in > Documentation/process/coding-style.rst for when to use gotos. > > In this particular case I think we are better off using an > if-statement. What about something like this: > > if (gma_encoder->type == INTEL_OUTPUT_LVDS || > gma_encoder->type == INTEL_OUTPUT_MIPI) { > ret = gma_backlight_init(); > break; > } Yes, it looks better. I have sent a PATCH v3 with changes as you suggested, please check it. Thank you very much. -- Xiaomeng Tong
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c index 2aff54d505e2..929fd47548b4 100644 --- a/drivers/gpu/drm/gma500/psb_drv.c +++ b/drivers/gpu/drm/gma500/psb_drv.c @@ -400,9 +400,10 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags) case INTEL_OUTPUT_LVDS: case INTEL_OUTPUT_MIPI: ret = gma_backlight_init(dev); - break; + goto out; } } +out: drm_connector_list_iter_end(&conn_iter); if (ret)
Instead of exiting the loop as expected when an entry is found, the list_for_each_entry() continues until the traversal is complete. To avoid potential executing 'ret = gma_backlight_init(dev);' repeatly, goto outside the loop when the entry is found. Signed-off-by: Xiaomeng Tong <xiam0nd.tong@gmail.com> --- changes since v1: - goto outside the loop (Xiaomeng Tong) v1: https://lore.kernel.org/lkml/20220401115811.9656-1-xiam0nd.tong@gmail.com/ --- drivers/gpu/drm/gma500/psb_drv.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)