[PATCH] drm/amdgpu: Release memory when psp sw_init is failed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Release the memory (psp->cmd) when psp initialization is
failed in psp_sw_init

Signed-off-by: Ma Jun <Jun.Ma2@xxxxxxx>
Change-Id: I2f88b5919142d55dd7d3820a7da94823286db235
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index a6acec1a6155..1227dc014c80 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -305,9 +305,10 @@ static int psp_sw_init(void *handle)
 		ret = psp_init_sriov_microcode(psp);
 	else
 		ret = psp_init_microcode(psp);
+
 	if (ret) {
 		DRM_ERROR("Failed to load psp firmware!\n");
-		return ret;
+		goto failure;
 	}
 
 	adev->psp.xgmi_context.supports_extended_data =
@@ -339,25 +340,27 @@ static int psp_sw_init(void *handle)
 		ret = psp_memory_training_init(psp);
 		if (ret) {
 			DRM_ERROR("Failed to initialize memory training!\n");
-			return ret;
+			goto failure;
 		}
 
 		ret = psp_mem_training(psp, PSP_MEM_TRAIN_COLD_BOOT);
 		if (ret) {
 			DRM_ERROR("Failed to process memory training!\n");
-			return ret;
+			goto failure;
 		}
 	}
 
 	if (adev->ip_versions[MP0_HWIP][0] == IP_VERSION(11, 0, 0) ||
 	    adev->ip_versions[MP0_HWIP][0] == IP_VERSION(11, 0, 7)) {
 		ret= psp_sysfs_init(adev);
-		if (ret) {
-			return ret;
-		}
+		if (ret)
+			goto failure;
 	}
 
 	return 0;
+failure:
+	kfree(psp->cmd);
+	return ret;
 }
 
 static int psp_sw_fini(void *handle)
-- 
2.25.1




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux