diff options
author | Tom St Denis <tom.stdenis@amd.com> | 2016-08-25 12:41:15 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-08-25 14:02:46 -0400 |
commit | e701f97ff34a3ec904c19d72a7ca81eed98d5ad9 (patch) | |
tree | 370575f5494f2fcf5c1d79f7b9262ff5eb6af44e | |
parent | cc945ce3ab563d7dd7657510e1990f6f606c9b46 (diff) |
drm/amd/amdgpu: Clean up memory leak in cz_dpm_init().
If init fails free up any allocated memory.
Signed-off-by: Tom St Denis <tom.stdenis@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cz_dpm.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/cz_dpm.c b/drivers/gpu/drm/amd/amdgpu/cz_dpm.c index 9c2ab73a7ae3..e7ea28c0c5b8 100644 --- a/drivers/gpu/drm/amd/amdgpu/cz_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/cz_dpm.c | |||
@@ -44,6 +44,7 @@ | |||
44 | 44 | ||
45 | static void cz_dpm_powergate_uvd(struct amdgpu_device *adev, bool gate); | 45 | static void cz_dpm_powergate_uvd(struct amdgpu_device *adev, bool gate); |
46 | static void cz_dpm_powergate_vce(struct amdgpu_device *adev, bool gate); | 46 | static void cz_dpm_powergate_vce(struct amdgpu_device *adev, bool gate); |
47 | static void cz_dpm_fini(struct amdgpu_device *adev); | ||
47 | 48 | ||
48 | static struct cz_ps *cz_get_ps(struct amdgpu_ps *rps) | 49 | static struct cz_ps *cz_get_ps(struct amdgpu_ps *rps) |
49 | { | 50 | { |
@@ -411,11 +412,11 @@ static int cz_dpm_init(struct amdgpu_device *adev) | |||
411 | 412 | ||
412 | ret = amdgpu_get_platform_caps(adev); | 413 | ret = amdgpu_get_platform_caps(adev); |
413 | if (ret) | 414 | if (ret) |
414 | return ret; | 415 | goto err; |
415 | 416 | ||
416 | ret = amdgpu_parse_extended_power_table(adev); | 417 | ret = amdgpu_parse_extended_power_table(adev); |
417 | if (ret) | 418 | if (ret) |
418 | return ret; | 419 | goto err; |
419 | 420 | ||
420 | pi->sram_end = SMC_RAM_END; | 421 | pi->sram_end = SMC_RAM_END; |
421 | 422 | ||
@@ -469,23 +470,26 @@ static int cz_dpm_init(struct amdgpu_device *adev) | |||
469 | 470 | ||
470 | ret = cz_parse_sys_info_table(adev); | 471 | ret = cz_parse_sys_info_table(adev); |
471 | if (ret) | 472 | if (ret) |
472 | return ret; | 473 | goto err; |
473 | 474 | ||
474 | cz_patch_voltage_values(adev); | 475 | cz_patch_voltage_values(adev); |
475 | cz_construct_boot_state(adev); | 476 | cz_construct_boot_state(adev); |
476 | 477 | ||
477 | ret = cz_parse_power_table(adev); | 478 | ret = cz_parse_power_table(adev); |
478 | if (ret) | 479 | if (ret) |
479 | return ret; | 480 | goto err; |
480 | 481 | ||
481 | ret = cz_process_firmware_header(adev); | 482 | ret = cz_process_firmware_header(adev); |
482 | if (ret) | 483 | if (ret) |
483 | return ret; | 484 | goto err; |
484 | 485 | ||
485 | pi->dpm_enabled = true; | 486 | pi->dpm_enabled = true; |
486 | pi->uvd_dynamic_pg = false; | 487 | pi->uvd_dynamic_pg = false; |
487 | 488 | ||
488 | return 0; | 489 | return 0; |
490 | err: | ||
491 | cz_dpm_fini(adev); | ||
492 | return ret; | ||
489 | } | 493 | } |
490 | 494 | ||
491 | static void cz_dpm_fini(struct amdgpu_device *adev) | 495 | static void cz_dpm_fini(struct amdgpu_device *adev) |