ni_patch_single_dependency_table_based_on_leakage() return zero or
negative error code. But ni_patch_dependency_tables_based_on_leakage()
doesn't check the return value of the first function call. It's same for
ni_dpm_init(). It's better to add this error code check.

Signed-off-by: Su Hui <su...@nfschina.com>
---
 drivers/gpu/drm/radeon/ni_dpm.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/radeon/ni_dpm.c b/drivers/gpu/drm/radeon/ni_dpm.c
index 3e1c1a392fb7..f521dc929a06 100644
--- a/drivers/gpu/drm/radeon/ni_dpm.c
+++ b/drivers/gpu/drm/radeon/ni_dpm.c
@@ -1010,6 +1010,8 @@ static int 
ni_patch_dependency_tables_based_on_leakage(struct radeon_device *rde
 
        ret = ni_patch_single_dependency_table_based_on_leakage(rdev,
                                                                
&rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk);
+       if (ret)
+               return ret;
 
        ret = ni_patch_single_dependency_table_based_on_leakage(rdev,
                                                                
&rdev->pm.dpm.dyn_state.vddc_dependency_on_mclk);
@@ -4098,7 +4100,12 @@ int ni_dpm_init(struct radeon_device *rdev)
        rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[3].clk = 
72000;
        rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[3].v = 900;
 
-       ni_patch_dependency_tables_based_on_leakage(rdev);
+       ret = ni_patch_dependency_tables_based_on_leakage(rdev);
+       if (ret) {
+               
kfree(rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries);
+               r600_free_extended_power_table(rdev);
+               return ret;
+       }
 
        if (rdev->pm.dpm.voltage_response_time == 0)
                rdev->pm.dpm.voltage_response_time = 
R600_VOLTAGERESPONSETIME_DFLT;
-- 
2.30.2

Reply via email to