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
|