Thank you for your contribution! Sashiko AI review found 1 potential issue(s) 
to consider:

Pre-existing issues:
- [High] The GPU object and its associated resources are leaked if 
`dev_pm_opp_of_find_icc_paths()` fails in `adreno_bind()`.
--

--- Patch [1]: [PATCH] drm/msm/adreno: fix autosuspend cleanup during teardown 
---
commit d01531efa3b8df1b3ab17728c644cfbadd605a8f
Author: Guangshuo Li <[email protected]>

drm/msm/adreno: fix autosuspend cleanup during teardown

This commit adds a missing pm_runtime_dont_use_autosuspend() call to
adreno_gpu_cleanup() to properly drop the usage count during teardown.

> diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c 
> b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
> index 3370cd44382fe..f4b22e04f9135 100644
> --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c
> +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
> @@ -1261,6 +1261,8 @@ void adreno_gpu_cleanup(struct adreno_gpu *adreno_gpu)
>       for (i = 0; i < ARRAY_SIZE(adreno_gpu->info->fw); i++)
>               release_firmware(adreno_gpu->fw[i]);
>  
> +     pm_runtime_dont_use_autosuspend(&gpu->pdev->dev);
> +
>       if (priv && pm_runtime_enabled(&priv->gpu_pdev->dev))
>               pm_runtime_disable(&priv->gpu_pdev->dev);

[Severity: High]
This isn't a regression introduced by this patch, but I noticed a
potential leak in adreno_bind().

Looking at adreno_bind() in drivers/gpu/drm/msm/adreno/adreno_device.c:

drivers/gpu/drm/msm/adreno/adreno_device.c:adreno_bind() {
    ...
        gpu = info->funcs->init(drm);
        if (IS_ERR(gpu)) {
                dev_warn(drm->dev, "failed to load adreno gpu\n");
                return PTR_ERR(gpu);
        }

        ret = dev_pm_opp_of_find_icc_paths(dev, NULL);
        if (ret)
                return ret;
    ...
}

During component binding in adreno_bind(), if dev_pm_opp_of_find_icc_paths()
fails (which can happen with -EPROBE_DEFER), it returns immediately without
calling gpu->funcs->destroy(gpu).

Because component binding failed, the component framework will not call
adreno_unbind(), which leaves resources allocated during
info->funcs->init(drm) (like a6xx_gpu_init()) leaked. This happens on
every probe deferral.

Does this code leak the GPU object and its associated resources if
dev_pm_opp_of_find_icc_paths() fails?

-- 
Sashiko AI review ยท 
https://sashiko.dev/#/patchset/[email protected]?part=1

Reply via email to