Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Monk Liu and committed by
Alex Deucher
13331ac3 67a6a504

+21 -1
+21 -1
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
··· 836 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 859 static int gfx_v8_0_init_microcode(struct amdgpu_device *adev) 840 860 { 841 861 const char *chip_name; ··· 2003 1983 2004 1984 gfx_v8_0_rlc_fini(adev); 2005 1985 2006 - kfree(adev->gfx.rlc.register_list_format); 1986 + gfx_v8_0_free_microcode(adev); 2007 1987 2008 1988 return 0; 2009 1989 }