]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/msm/adreno: Assign msm_gpu->pdev earlier to avoid nullptrs
authorKonrad Dybcio <konrad.dybcio@linaro.org>
Tue, 9 Jul 2024 11:15:40 +0000 (13:15 +0200)
committerRob Clark <robdclark@chromium.org>
Sun, 1 Sep 2024 15:17:53 +0000 (08:17 -0700)
There are some cases, such as the one uncovered by Commit 46d4efcccc68
("drm/msm/a6xx: Avoid a nullptr dereference when speedbin setting fails")
where

msm_gpu_cleanup() : platform_set_drvdata(gpu->pdev, NULL);

is called on gpu->pdev == NULL, as the GPU device has not been fully
initialized yet.

Turns out that there's more than just the aforementioned path that
causes this to happen (e.g. the case when there's speedbin data in the
catalog, but opp-supported-hw is missing in DT).

Assigning msm_gpu->pdev earlier seems like the least painful solution
to this, therefore do so.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/602742/
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/adreno/adreno_gpu.c
drivers/gpu/drm/msm/msm_gpu.c

index 7620654bb2bb7c1569e7f47eb148f2ad79bfc166..465a4cd14a435b604035babf7850276d6e3fc9b3 100644 (file)
@@ -1087,6 +1087,7 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
        adreno_gpu->chip_id = config->chip_id;
 
        gpu->allow_relocs = config->info->family < ADRENO_6XX_GEN1;
+       gpu->pdev = pdev;
 
        /* Only handle the core clock when GMU is not in use (or is absent). */
        if (adreno_has_gmu_wrapper(adreno_gpu) ||
index 3666b42b4ecd7f91b24302d7f229eeefdc3c39b7..a274b846642374c47f690d85fe444096c41a5d8d 100644 (file)
@@ -931,7 +931,6 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
        if (IS_ERR(gpu->gpu_cx))
                gpu->gpu_cx = NULL;
 
-       gpu->pdev = pdev;
        platform_set_drvdata(pdev, &gpu->adreno_smmu);
 
        msm_devfreq_init(gpu);