[AMD Official Use Only - AMD Internal Distribution Only]

Reviewed-by: Yang Wang <kevinyang.w...@amd.com>

Best Regards,
Kevin

-----Original Message-----
From: Ma, Jun <jun....@amd.com>
Sent: Monday, May 13, 2024 4:56 PM
To: amd-gfx@lists.freedesktop.org
Cc: Feng, Kenneth <kenneth.f...@amd.com>; Deucher, Alexander 
<alexander.deuc...@amd.com>; Wang, Yang(Kevin) <kevinyang.w...@amd.com>; 
Koenig, Christian <christian.koe...@amd.com>; Ma, Jun <jun....@amd.com>
Subject: [PATCH 1/5] drm/amdgpu/pm: Fix the null pointer dereference for smu7

optimize the code to avoid pass a null pointer (hwmgr->backend) to function 
smu7_update_edc_leakage_table.

Signed-off-by: Ma Jun <jun....@amd.com>
---
 .../drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c   | 50 +++++++++----------
 1 file changed, 24 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c 
b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
index 123af237878f..632a25957477 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
@@ -2957,6 +2957,7 @@ static int smu7_update_edc_leakage_table(struct pp_hwmgr 
*hwmgr)

 static int smu7_hwmgr_backend_init(struct pp_hwmgr *hwmgr)  {
+       struct amdgpu_device *adev = hwmgr->adev;
        struct smu7_hwmgr *data;
        int result = 0;

@@ -2993,40 +2994,37 @@ static int smu7_hwmgr_backend_init(struct pp_hwmgr 
*hwmgr)
        /* Initalize Dynamic State Adjustment Rule Settings */
        result = phm_initializa_dynamic_state_adjustment_rule_settings(hwmgr);

-       if (0 == result) {
-               struct amdgpu_device *adev = hwmgr->adev;
+       if (result)
+               goto fail;

-               data->is_tlu_enabled = false;
+       data->is_tlu_enabled = false;

-               hwmgr->platform_descriptor.hardwareActivityPerformanceLevels =
+       hwmgr->platform_descriptor.hardwareActivityPerformanceLevels =
                                                        
SMU7_MAX_HARDWARE_POWERLEVELS;
-               hwmgr->platform_descriptor.hardwarePerformanceLevels = 2;
-               hwmgr->platform_descriptor.minimumClocksReductionPercentage = 
50;
+       hwmgr->platform_descriptor.hardwarePerformanceLevels = 2;
+       hwmgr->platform_descriptor.minimumClocksReductionPercentage = 50;

-               data->pcie_gen_cap = adev->pm.pcie_gen_mask;
-               if (data->pcie_gen_cap & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3)
-                       data->pcie_spc_cap = 20;
-               else
-                       data->pcie_spc_cap = 16;
-               data->pcie_lane_cap = adev->pm.pcie_mlw_mask;
-
-               hwmgr->platform_descriptor.vbiosInterruptId = 0x20000400; /* 
IRQ_SOURCE1_SW_INT */
-/* The true clock step depends on the frequency, typically 4.5 or 9 MHz. Here 
we use 5. */
-               hwmgr->platform_descriptor.clockStep.engineClock = 500;
-               hwmgr->platform_descriptor.clockStep.memoryClock = 500;
-               smu7_thermal_parameter_init(hwmgr);
-       } else {
-               /* Ignore return value in here, we are cleaning up a mess. */
-               smu7_hwmgr_backend_fini(hwmgr);
-       }
+       data->pcie_gen_cap = adev->pm.pcie_gen_mask;
+       if (data->pcie_gen_cap & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3)
+               data->pcie_spc_cap = 20;
+       else
+               data->pcie_spc_cap = 16;
+       data->pcie_lane_cap = adev->pm.pcie_mlw_mask;
+
+       hwmgr->platform_descriptor.vbiosInterruptId = 0x20000400; /* 
IRQ_SOURCE1_SW_INT */
+       /* The true clock step depends on the frequency, typically 4.5 or 9 
MHz. Here we use 5. */
+       hwmgr->platform_descriptor.clockStep.engineClock = 500;
+       hwmgr->platform_descriptor.clockStep.memoryClock = 500;
+       smu7_thermal_parameter_init(hwmgr);

        result = smu7_update_edc_leakage_table(hwmgr);
-       if (result) {
-               smu7_hwmgr_backend_fini(hwmgr);
-               return result;
-       }
+       if (result)
+               goto fail;

        return 0;
+fail:
+       smu7_hwmgr_backend_fini(hwmgr);
+       return result;
 }

 static int smu7_force_dpm_highest(struct pp_hwmgr *hwmgr)
--
2.34.1

Reply via email to