summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYiPeng Chai <YiPeng.Chai@amd.com>2026-05-12 11:00:14 +0800
committerAlex Deucher <alexander.deucher@amd.com>2026-05-19 11:53:11 -0400
commit642ed3af44dbe2c1258bfbcda8c294bc3cfd1d39 (patch)
tree248eb212dbf40ea1e32337c05a9c18efa5e893b1
parent89e50de5654dbe7a137e03d78629542e17ba7202 (diff)
drm/amd/ras: fix memory leak on ras sw_init failure
Fix memory leak on ras sw_init failure. Signed-off-by: YiPeng Chai <YiPeng.Chai@amd.com> Reviewed-by: Tao Zhou <tao.zhou1@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c
index c12e756b4ef0..a22d1aebbeb9 100644
--- a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c
+++ b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c
@@ -309,13 +309,17 @@ static int amdgpu_ras_mgr_sw_init(struct amdgpu_ip_block *ip_block)
if (!ras_mgr->ras_core) {
RAS_DEV_ERR(adev, "Failed to create ras core!\n");
ret = -EINVAL;
- goto err;
+ goto err1;
}
ras_mgr->ras_core->dev = adev;
amdgpu_ras_process_init(adev);
- ras_core_sw_init(ras_mgr->ras_core);
+ ret = ras_core_sw_init(ras_mgr->ras_core);
+ if (ret) {
+ RAS_DEV_ERR(adev, "ras_core_sw_init failed! ret:%d\n", ret);
+ goto err2;
+ }
amdgpu_ras_mgr_init_event_mgr(ras_mgr->ras_core);
if (amdgpu_sriov_vf(adev)) {
@@ -323,14 +327,22 @@ static int amdgpu_ras_mgr_sw_init(struct amdgpu_ip_block *ip_block)
if (ret) {
RAS_DEV_ERR(adev,
"Virt ras sw_init failed! ret:%d\n", ret);
- goto err;
+ goto err3;
}
}
return 0;
-err:
+err3:
+ if (ras_mgr->ras_core)
+ ras_core_sw_fini(ras_mgr->ras_core);
+err2:
+ amdgpu_ras_process_fini(adev);
+ if (ras_mgr->ras_core)
+ ras_core_destroy(ras_mgr->ras_core);
+err1:
kfree(ras_mgr);
+ con->ras_mgr = NULL;
return ret;
}