diff mbox series

gpu: drm: exynos: hdmi: eliminate uses of of_node_put()

Message ID 20240415003958.721061-1-shivani07g@gmail.com
State New
Headers show
Series gpu: drm: exynos: hdmi: eliminate uses of of_node_put() | expand

Commit Message

Shivani Gupta April 15, 2024, 12:39 a.m. UTC
Utilize the __free() cleanup handler within the hdmi_get_phy_io function
to automatically release the device node when it is out of scope.
This eliminates the manual invocation of of_node_put(), reducing the
potential for memory leaks.

The modification requires initializing the device node at the beginning
of the function, ensuring that the automatic cleanup is safely executed.

Consequently, this removes the need for error cleanup paths that utilize
goto statements and the jump to out is no longer necessary.

Suggested-by: Julia Lawall <julia.lawall@inria.fr>
Signed-off-by: Shivani Gupta <shivani07g@gmail.com>
---
 drivers/gpu/drm/exynos/exynos_hdmi.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

--
2.34.1

Comments

Inki Dae April 25, 2024, 1:47 a.m. UTC | #1
Good cleanup. Applied. :)

Thanks,
Inki Dae

2024년 4월 15일 (월) 오전 9:40, Shivani Gupta <shivani07g@gmail.com>님이 작성:
>
> Utilize the __free() cleanup handler within the hdmi_get_phy_io function
> to automatically release the device node when it is out of scope.
> This eliminates the manual invocation of of_node_put(), reducing the
> potential for memory leaks.
>
> The modification requires initializing the device node at the beginning
> of the function, ensuring that the automatic cleanup is safely executed.
>
> Consequently, this removes the need for error cleanup paths that utilize
> goto statements and the jump to out is no longer necessary.
>
> Suggested-by: Julia Lawall <julia.lawall@inria.fr>
> Signed-off-by: Shivani Gupta <shivani07g@gmail.com>
> ---
>  drivers/gpu/drm/exynos/exynos_hdmi.c | 15 +++++----------
>  1 file changed, 5 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
> index b1d02dec3774..a741fd949482 100644
> --- a/drivers/gpu/drm/exynos/exynos_hdmi.c
> +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
> @@ -1919,10 +1919,9 @@ static int hdmi_get_ddc_adapter(struct hdmi_context *hdata)
>  static int hdmi_get_phy_io(struct hdmi_context *hdata)
>  {
>         const char *compatible_str = "samsung,exynos4212-hdmiphy";
> -       struct device_node *np;
> -       int ret = 0;
> +       struct device_node *np __free(device_node) =
> +               of_find_compatible_node(NULL, NULL, compatible_str);
>
> -       np = of_find_compatible_node(NULL, NULL, compatible_str);
>         if (!np) {
>                 np = of_parse_phandle(hdata->dev->of_node, "phy", 0);
>                 if (!np) {
> @@ -1937,21 +1936,17 @@ static int hdmi_get_phy_io(struct hdmi_context *hdata)
>                 if (!hdata->regs_hdmiphy) {
>                         DRM_DEV_ERROR(hdata->dev,
>                                       "failed to ioremap hdmi phy\n");
> -                       ret = -ENOMEM;
> -                       goto out;
> +                       return -ENOMEM;
>                 }
>         } else {
>                 hdata->hdmiphy_port = of_find_i2c_device_by_node(np);
>                 if (!hdata->hdmiphy_port) {
>                         DRM_INFO("Failed to get hdmi phy i2c client\n");
> -                       ret = -EPROBE_DEFER;
> -                       goto out;
> +                       return -EPROBE_DEFER;
>                 }
>         }
>
> -out:
> -       of_node_put(np);
> -       return ret;
> +       return 0;
>  }
>
>  static int hdmi_probe(struct platform_device *pdev)
> --
> 2.34.1
>
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index b1d02dec3774..a741fd949482 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -1919,10 +1919,9 @@  static int hdmi_get_ddc_adapter(struct hdmi_context *hdata)
 static int hdmi_get_phy_io(struct hdmi_context *hdata)
 {
 	const char *compatible_str = "samsung,exynos4212-hdmiphy";
-	struct device_node *np;
-	int ret = 0;
+	struct device_node *np __free(device_node) =
+		of_find_compatible_node(NULL, NULL, compatible_str);

-	np = of_find_compatible_node(NULL, NULL, compatible_str);
 	if (!np) {
 		np = of_parse_phandle(hdata->dev->of_node, "phy", 0);
 		if (!np) {
@@ -1937,21 +1936,17 @@  static int hdmi_get_phy_io(struct hdmi_context *hdata)
 		if (!hdata->regs_hdmiphy) {
 			DRM_DEV_ERROR(hdata->dev,
 				      "failed to ioremap hdmi phy\n");
-			ret = -ENOMEM;
-			goto out;
+			return -ENOMEM;
 		}
 	} else {
 		hdata->hdmiphy_port = of_find_i2c_device_by_node(np);
 		if (!hdata->hdmiphy_port) {
 			DRM_INFO("Failed to get hdmi phy i2c client\n");
-			ret = -EPROBE_DEFER;
-			goto out;
+			return -EPROBE_DEFER;
 		}
 	}

-out:
-	of_node_put(np);
-	return ret;
+	return 0;
 }

 static int hdmi_probe(struct platform_device *pdev)