aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1610-drm-amdgpu-Fix-memory-leak-when-userptr-validation-f.patch
blob: 2c0d7ce395cfe908eed3d5e313135b9e44a890a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
From f126b9abfc5314c00d230d5ee0bfaa2d17bf23a1 Mon Sep 17 00:00:00 2001
From: Felix Kuehling <Felix.Kuehling@amd.com>
Date: Tue, 28 Feb 2017 14:17:19 -0500
Subject: [PATCH 1610/4131] drm/amdgpu: Fix memory leak when userptr validation
 failed

User pages must be released if ttm_bo_validate failed. Otherwise
those pages would be leaked.

This fixes KFDMemoryTest.BigBufferStressTest in kfdtest getting
killed by the OOM killer.

Bug: SWDEV-114596

Change-Id: Ib4044e309b43e7e04c3509a2d49c87d26f0e0c4a
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 28dae72..6283c21 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -416,8 +416,15 @@ static int amdgpu_amdkfd_bo_validate(struct amdgpu_bo *bo, uint32_t domain,
 		amdgpu_ttm_placement_from_domain(bo, domain);
 		ret = ttm_bo_validate(&bo->tbo, &bo->placement,
 				      true, false);
-		if (ret)
+		if (ret) {
+			/* Don't leak the pages. If validate failed,
+			 * the pages aren't bound, and won't be
+			 * released by unbind later on
+			 */
+			release_pages(bo->tbo.ttm->pages,
+				      bo->tbo.ttm->num_pages, 0);
 			goto validate_fail;
+		}
 		if (wait)
 			ttm_bo_wait(&bo->tbo, false, false);
 	}
-- 
2.7.4