]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Oct 2024 10:00:32 +0000 (12:00 +0200)
[ Upstream commit 16007768551d5bfe53426645401435ca8d2ef54f ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/msm/adreno/adreno_gpu.c
drivers/gpu/drm/msm/msm_gpu.c

index d5d9361e11aa53a2620123d89aa7b4ac8fc2ed9c..8e8f55225e1ead18b133601c83db0b1908c7aeab 100644 (file)
@@ -1079,6 +1079,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 cd185b9636d261409233f2f57426801b9ee642a7..56b6de049bd7b82827b22b464caf4ab0e6d659c6 100644 (file)
@@ -929,7 +929,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);