Reviewed-by: Ken Wang <Qingqing.Wang at amd.com> ________________________________ å??件人: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> 代表 Chunming Zhou <David1.Zhou at amd.com> å??é??æ?¶é?´: 2017å¹´4æ??7æ?¥ 11:36:18 æ?¶ä»¶äºº: amd-gfx at lists.freedesktop.org; Wang, Ken æ??é??: Zhou, David(ChunMing) 主é¢?: [PATCH] drm/amdgpu: fix memory leak in wait_all_fence Change-Id: Ib3e271e00e49f10152c1b3eace981a6bf78820de Signed-off-by: Chunming Zhou <David1.Zhou at amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index de1c4c3..d842452 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -1216,22 +1216,28 @@ static int amdgpu_cs_wait_all_fences(struct amdgpu_device *adev, struct drm_amdgpu_fence *fences) { uint32_t fence_count = wait->in.fence_count; + struct fence **array; unsigned int i; long r = 1; + array = kcalloc(fence_count, sizeof(struct fence *), GFP_KERNEL); + + if (array == NULL) + return -ENOMEM; for (i = 0; i < fence_count; i++) { struct fence *fence; unsigned long timeout = amdgpu_gem_timeout(wait->in.timeout_ns); fence = amdgpu_cs_get_fence(adev, filp, &fences[i]); - if (IS_ERR(fence)) - return PTR_ERR(fence); - else if (!fence) + if (IS_ERR(fence)) { + r = PTR_ERR(fence); + goto err; + } else if (!fence) continue; - + array[i] = fence; r = kcl_fence_wait_timeout(fence, true, timeout); if (r < 0) - return r; + goto err; if (r == 0) break; @@ -1240,7 +1246,14 @@ static int amdgpu_cs_wait_all_fences(struct amdgpu_device *adev, memset(wait, 0, sizeof(*wait)); wait->out.status = (r > 0); - return 0; + r = 0; + +err: + for (i = 0; i < fence_count; i++) + fence_put(array[i]); + kfree(array); + + return r; } /** -- 1.9.1 _______________________________________________ amd-gfx mailing list amd-gfx at lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20170407/15936396/attachment.html>