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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
From 5d94091aa4e0497f14e53604cfbbcb9faa979c69 Mon Sep 17 00:00:00 2001
From: Ben Goz <ben.goz@amd.com>
Date: Mon, 21 Dec 2015 17:39:47 +0200
Subject: [PATCH 1379/4131] drm/amdgpu: Verify amdgpu_bo only if amdgpu_bo
allocated from amdgpu
Change-Id: Id75381226beacc5c176b9f02cc28b185654fcae5
Signed-off-by: Ben Goz <ben.goz@amd.com>
Conflicts:
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 17 ++++++++++++++---
3 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index d6d7924..b20c0e4 100755
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1969,3 +1969,4 @@ static inline int amdgpu_dm_display_resume(struct amdgpu_device *adev) { return
#include "amdgpu_object.h"
#endif
+
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
index b5595eb..fabddbb 100755
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
@@ -83,6 +83,7 @@ struct amdgpu_bo {
struct ttm_bo_kmap_obj dma_buf_vmap;
struct amdgpu_mn *mn;
+ bool is_kfd_bo;
struct kfd_process_device *pdd;
union {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index de4634f..cb6aaea 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -276,11 +276,19 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo,
static int amdgpu_verify_access(struct ttm_buffer_object *bo, struct file *filp)
{
- struct amdgpu_bo *abo = container_of(bo, struct amdgpu_bo, tbo);
- struct drm_file *file_priv = filp->private_data;
+ struct amdgpu_bo *abo;
+ struct drm_file *file_priv;
struct amdgpu_gem_object *gobj;
- if (filp == NULL)
+
+
+ abo = container_of(bo, struct amdgpu_bo, tbo);
+ /*
+ * Don't verify access for KFD BO as it doesn't necessary has
+ * KGD file pointer
+ */
+ if (!abo || abo->is_kfd_bo || !filp)
return 0;
+ file_priv = filp->private_data;
if (amdgpu_ttm_tt_get_usermm(bo->ttm))
return -EPERM;
@@ -1494,6 +1502,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
NULL, NULL);
if (r)
return r;
+
DRM_INFO("amdgpu: %uM of VRAM memory ready\n",
(unsigned) (adev->mc.real_vram_size / (1024 * 1024)));
@@ -1574,6 +1583,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
if (!adev->mman.initialized)
return;
amdgpu_ttm_debugfs_fini(adev);
+
if (adev->stolen_vga_memory) {
r = amdgpu_bo_reserve(adev->stolen_vga_memory, true);
if (r == 0) {
@@ -1584,6 +1594,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
}
amdgpu_ssg_fini(adev);
amdgpu_direct_gma_fini(adev);
+
ttm_bo_clean_mm(&adev->mman.bdev, TTM_PL_VRAM);
ttm_bo_clean_mm(&adev->mman.bdev, TTM_PL_TT);
if (adev->gds.mem.total_size)
--
2.7.4
|