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);
if (ret)
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
dri-devel@lists.freedesktop.org