diff options
author | Monk Liu <Monk.Liu@amd.com> | 2016-05-30 02:18:57 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-06-09 10:49:06 -0400 |
commit | 13331ac384e8211a0bf3158a895ac8b22005a622 (patch) | |
tree | 8b09f05934e10ed5f0050b98fb047c08c4d439f2 | |
parent | 67a6a504af90e58c478b2e7fa6c0af8ed64c995b (diff) |
drm/amdgpu: fix gfx8 ucode mem leak
Signed-off-by: Monk Liu <Monk.Liu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 4d747ba331db..9f6f8669edc3 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -836,6 +836,26 @@ err1: | |||
836 | return r; | 836 | return r; |
837 | } | 837 | } |
838 | 838 | ||
839 | |||
840 | static void gfx_v8_0_free_microcode(struct amdgpu_device *adev) { | ||
841 | release_firmware(adev->gfx.pfp_fw); | ||
842 | adev->gfx.pfp_fw = NULL; | ||
843 | release_firmware(adev->gfx.me_fw); | ||
844 | adev->gfx.me_fw = NULL; | ||
845 | release_firmware(adev->gfx.ce_fw); | ||
846 | adev->gfx.ce_fw = NULL; | ||
847 | release_firmware(adev->gfx.rlc_fw); | ||
848 | adev->gfx.rlc_fw = NULL; | ||
849 | release_firmware(adev->gfx.mec_fw); | ||
850 | adev->gfx.mec_fw = NULL; | ||
851 | if ((adev->asic_type != CHIP_STONEY) && | ||
852 | (adev->asic_type != CHIP_TOPAZ)) | ||
853 | release_firmware(adev->gfx.mec2_fw); | ||
854 | adev->gfx.mec2_fw = NULL; | ||
855 | |||
856 | kfree(adev->gfx.rlc.register_list_format); | ||
857 | } | ||
858 | |||
839 | static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) | 859 | static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) |
840 | { | 860 | { |
841 | const char *chip_name; | 861 | const char *chip_name; |
@@ -1983,7 +2003,7 @@ static int gfx_v8_0_sw_fini(void *handle) | |||
1983 | 2003 | ||
1984 | gfx_v8_0_rlc_fini(adev); | 2004 | gfx_v8_0_rlc_fini(adev); |
1985 | 2005 | ||
1986 | kfree(adev->gfx.rlc.register_list_format); | 2006 | gfx_v8_0_free_microcode(adev); |
1987 | 2007 | ||
1988 | return 0; | 2008 | return 0; |
1989 | } | 2009 | } |