diff options
author | Rex Zhu <Rex.Zhu@amd.com> | 2017-09-25 05:34:00 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-09-28 16:03:32 -0400 |
commit | d04f257635a2f4fd74fcd7543a9337daeb40dea1 (patch) | |
tree | eba711e0829a6929724ceeece6ad931a909a2942 /drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c | |
parent | 46967c221fa9d06f4ddf168fbcf16fd9216dd574 (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.c | 9 |
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 | ||
218 | static int amdgpu_pp_suspend(void *handle) | 221 | static int amdgpu_pp_suspend(void *handle) |