aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c
diff options
context:
space:
mode:
authorRex Zhu <Rex.Zhu@amd.com>2017-09-25 05:34:00 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-28 16:03:32 -0400
commitd04f257635a2f4fd74fcd7543a9337daeb40dea1 (patch)
treeeba711e0829a6929724ceeece6ad931a909a2942 /drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c
parent46967c221fa9d06f4ddf168fbcf16fd9216dd574 (diff)
drm/amd/powerplay: fix memory leak in powerplay
cgs device not free. Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c
index c05e5a86e7cc..2ed81cdb8320 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c
@@ -45,7 +45,7 @@ static int amdgpu_create_pp_handle(struct amdgpu_device *adev)
45 pp_init.chip_id = adev->asic_type; 45 pp_init.chip_id = adev->asic_type;
46 pp_init.pm_en = (amdgpu_dpm != 0 && !amdgpu_sriov_vf(adev)) ? true : false; 46 pp_init.pm_en = (amdgpu_dpm != 0 && !amdgpu_sriov_vf(adev)) ? true : false;
47 pp_init.feature_mask = amdgpu_pp_feature_mask; 47 pp_init.feature_mask = amdgpu_pp_feature_mask;
48 pp_init.device = amdgpu_cgs_create_device(adev); 48 pp_init.device = amd_pp->cgs_device;
49 ret = amd_powerplay_create(&pp_init, &(amd_pp->pp_handle)); 49 ret = amd_powerplay_create(&pp_init, &(amd_pp->pp_handle));
50 if (ret) 50 if (ret)
51 return -EINVAL; 51 return -EINVAL;
@@ -74,6 +74,7 @@ static int amdgpu_pp_early_init(void *handle)
74 case CHIP_VEGA10: 74 case CHIP_VEGA10:
75 case CHIP_RAVEN: 75 case CHIP_RAVEN:
76 adev->pp_enabled = true; 76 adev->pp_enabled = true;
77 amd_pp->cgs_device = amdgpu_cgs_create_device(adev);
77 if (amdgpu_create_pp_handle(adev)) 78 if (amdgpu_create_pp_handle(adev))
78 return -EINVAL; 79 return -EINVAL;
79 amd_pp->ip_funcs = &pp_ip_funcs; 80 amd_pp->ip_funcs = &pp_ip_funcs;
@@ -97,7 +98,7 @@ static int amdgpu_pp_early_init(void *handle)
97 amd_pp->ip_funcs = &ci_dpm_ip_funcs; 98 amd_pp->ip_funcs = &ci_dpm_ip_funcs;
98 amd_pp->pp_funcs = &ci_dpm_funcs; 99 amd_pp->pp_funcs = &ci_dpm_funcs;
99 } else { 100 } else {
100 adev->pp_enabled = true; 101 amd_pp->cgs_device = amdgpu_cgs_create_device(adev);
101 if (amdgpu_create_pp_handle(adev)) 102 if (amdgpu_create_pp_handle(adev))
102 return -EINVAL; 103 return -EINVAL;
103 amd_pp->ip_funcs = &pp_ip_funcs; 104 amd_pp->ip_funcs = &pp_ip_funcs;
@@ -211,8 +212,10 @@ static void amdgpu_pp_late_fini(void *handle)
211 adev->powerplay.pp_handle); 212 adev->powerplay.pp_handle);
212 213
213 214
214 if (adev->pp_enabled) 215 if (adev->pp_enabled) {
215 amd_powerplay_destroy(adev->powerplay.pp_handle); 216 amd_powerplay_destroy(adev->powerplay.pp_handle);
217 amdgpu_cgs_destroy_device(adev->powerplay.cgs_device);
218 }
216} 219}
217 220
218static int amdgpu_pp_suspend(void *handle) 221static int amdgpu_pp_suspend(void *handle)