drm/mediatek: Switch to for_each_child_of_node_scoped()
authorJavier Carrasco <javier.carrasco.cruz@gmail.com>
Fri, 11 Oct 2024 19:21:52 +0000 (21:21 +0200)
committerChun-Kuang Hu <chunkuang.hu@kernel.org>
Mon, 4 Nov 2024 12:23:15 +0000 (12:23 +0000)
Introduce the scoped variant of the loop to automatically release the
child node when it goes out of scope, which is more robust than the
non-scoped variant, and accounts for new early exits that could be added
in the future.

Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Reviewed-by: CK Hu <ck.hu@mediatek.com>
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://patchwork.kernel.org/project/dri-devel/patch/20241011-mtk_drm_drv_memleak-v1-2-2b40c74c8d75@gmail.com/
Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
drivers/gpu/drm/mediatek/mtk_drm_drv.c

index d7fc4f6..04680a6 100644 (file)
@@ -372,12 +372,11 @@ static bool mtk_drm_get_all_drm_priv(struct device *dev)
        struct mtk_drm_private *temp_drm_priv;
        struct device_node *phandle = dev->parent->of_node;
        const struct of_device_id *of_id;
-       struct device_node *node;
        struct device *drm_dev;
        unsigned int cnt = 0;
        int i, j;
 
-       for_each_child_of_node(phandle->parent, node) {
+       for_each_child_of_node_scoped(phandle->parent, node) {
                struct platform_device *pdev;
 
                of_id = of_match_node(mtk_drm_of_ids, node);
@@ -406,10 +405,8 @@ static bool mtk_drm_get_all_drm_priv(struct device *dev)
                if (temp_drm_priv->mtk_drm_bound)
                        cnt++;
 
-               if (cnt == MAX_CRTC) {
-                       of_node_put(node);
+               if (cnt == MAX_CRTC)
                        break;
-               }
        }
 
        if (drm_priv->data->mmsys_dev_num == cnt) {