[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <a4d23c3a-9791-4d2b-9853-9c9b27460db5@wanadoo.fr>
Date: Fri, 23 Aug 2024 12:46:38 +0200
From: Christophe JAILLET <christophe.jaillet@...adoo.fr>
To: Jinjie Ruan <ruanjinjie@...wei.com>, hjc@...k-chips.com, heiko@...ech.de,
andy.yan@...k-chips.com, maarten.lankhorst@...ux.intel.com,
mripard@...nel.org, tzimmermann@...e.de, airlied@...il.com, daniel@...ll.ch,
dri-devel@...ts.freedesktop.org, linux-arm-kernel@...ts.infradead.org,
linux-rockchip@...ts.infradead.org, linux-kernel@...r.kernel.org,
krzk@...nel.org, jic23@...nel.org
Subject: Re: [PATCH -next 2/5] drm/mediatek: Fix missing of_node_put() for
mtk_drm_get_all_drm_priv()
Le 23/08/2024 à 11:20, Jinjie Ruan a écrit :
> In mtk_drm_get_all_drm_priv(), break in for_each_child_of_node() should
> call of_node_put() to avoid child node resource leak, use
> for_each_child_of_node_scoped() to fix it.
>
> And avoid the need for manual cleanup of_node_put() in early exits
> from the loop for another one.
>
> Fixes: d761b9450e31 ("drm/mediatek: Add cnt checking for coverity issue")
> Signed-off-by: Jinjie Ruan <ruanjinjie@...wei.com>
> ---
> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 10 +++-------
> 1 file changed, 3 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 77b50c56c124..41aff0183cbd 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -371,12 +371,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);
> @@ -828,7 +827,6 @@ static int mtk_drm_probe(struct platform_device *pdev)
> struct device_node *phandle = dev->parent->of_node;
> const struct of_device_id *of_id;
> struct mtk_drm_private *private;
> - struct device_node *node;
> struct component_match *match = NULL;
> struct platform_device *ovl_adaptor;
> int ret;
> @@ -869,7 +867,7 @@ static int mtk_drm_probe(struct platform_device *pdev)
> }
>
> /* Iterate over sibling DISP function blocks */
> - for_each_child_of_node(phandle->parent, node) {
> + for_each_child_of_node_scoped(phandle->parent, node) {
> const struct of_device_id *of_id;
> enum mtk_ddp_comp_type comp_type;
> int comp_id;
> @@ -933,10 +931,8 @@ static int mtk_drm_probe(struct platform_device *pdev)
> }
>
> ret = mtk_ddp_comp_init(node, &private->ddp_comp[comp_id], comp_id);
> - if (ret) {
> - of_node_put(node);
> + if (ret)
> goto err_node;
Hi,
I've seen on another thread that is was not sure that scoped versions
and gotos played well together.
It was asked to check more in details and confirm that it was safe
before applying the patch.
I've not followed the discussion, so I just point it out, in case it helps.
I'll try to give it a look in the coming days.
CJ
> - }
> }
>
> if (!private->mutex_node) {
Powered by blists - more mailing lists