Messages in this thread | | | From | "Ruhl, Michael J" <> | Subject | RE: [PATCH] amdgpu: fixes memleak issue when init failed | Date | Wed, 22 Apr 2020 15:51:27 +0000 |
| |
>-----Original Message----- >From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of >Bernard Zhao >Sent: Tuesday, April 21, 2020 7:17 AM >To: Alex Deucher <alexander.deucher@amd.com>; Christian König ><christian.koenig@amd.com>; David (ChunMing) Zhou ><David1.Zhou@amd.com>; David Airlie <airlied@linux.ie>; Daniel Vetter ><daniel@ffwll.ch>; Tom St Denis <tom.stdenis@amd.com>; Ori Messinger ><Ori.Messinger@amd.com>; Sam Ravnborg <sam@ravnborg.org>; Bernard >Zhao <bernard@vivo.com>; amd-gfx@lists.freedesktop.org; dri- >devel@lists.freedesktop.org; linux-kernel@vger.kernel.org >Cc: opensource.kernel@vivo.com >Subject: [PATCH] amdgpu: fixes memleak issue when init failed > >VRAM manager and DRM MM when init failed, there is no operaction >to free kzalloc memory & remove device file. >This will lead to memleak & cause stability issue. > >Signed-off-by: Bernard Zhao <bernard@vivo.com> >--- > drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 24 >++++++++++++++++---- > 1 file changed, 19 insertions(+), 5 deletions(-) > >diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c >b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c >index 82a3299e53c0..4c5fb153e6b4 100644 >--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c >+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c >@@ -175,30 +175,44 @@ static int amdgpu_vram_mgr_init(struct >ttm_mem_type_manager *man, > ret = device_create_file(adev->dev, >&dev_attr_mem_info_vram_total); > if (ret) { > DRM_ERROR("Failed to create device file >mem_info_vram_total\n"); >- return ret; >+ goto VRAM_TOTAL_FAIL; > } > ret = device_create_file(adev->dev, >&dev_attr_mem_info_vis_vram_total);
Have you looked at the DEVICE_ATTR mechanism?
It is set up to add device files. You won't get the granularity of each file, but it has a lot more automatic-ness to setting this stuff up.
Mike
> if (ret) { > DRM_ERROR("Failed to create device file >mem_info_vis_vram_total\n"); >- return ret; >+ goto VIS_VRAM_TOTA_FAIL; > } > ret = device_create_file(adev->dev, >&dev_attr_mem_info_vram_used); > if (ret) { > DRM_ERROR("Failed to create device file >mem_info_vram_used\n"); >- return ret; >+ goto VRAM_USED_FAIL; > } > ret = device_create_file(adev->dev, >&dev_attr_mem_info_vis_vram_used); > if (ret) { > DRM_ERROR("Failed to create device file >mem_info_vis_vram_used\n"); >- return ret; >+ goto VIS_VRAM_USED_FAIL; > } > ret = device_create_file(adev->dev, >&dev_attr_mem_info_vram_vendor); > if (ret) { > DRM_ERROR("Failed to create device file >mem_info_vram_vendor\n"); >- return ret; >+ goto VRAM_VERDOR_FAIL; > } > > return 0; >+ >+VRAM_VERDOR_FAIL: >+ device_remove_file(adev->dev, >&dev_attr_mem_info_vis_vram_used); >+VIS_VRAM_USED_FAIL: >+ device_remove_file(adev->dev, &dev_attr_mem_info_vram_used); >+RVAM_USED_FAIL: >+ device_remove_file(adev->dev, >&dev_attr_mem_info_vis_vram_total); >+VIS_VRAM_TOTA_FAIL: >+ device_remove_file(adev->dev, &dev_attr_mem_info_vram_total); >+VRAM_TOTAL_FAIL: >+ kfree(mgr); >+ man->priv = NULL; >+ >+ return ret; > } > > /** >-- >2.26.2 > >_______________________________________________ >dri-devel mailing list >dri-devel@lists.freedesktop.org >https://lists.freedesktop.org/mailman/listinfo/dri-devel
| |