aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/1297-drm-amdkfd-Make-trap-handler-buffer-RO.patch
blob: ae9abeda22cdc7691cb0f1b1e8d7e389cc18e114 (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
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
From 5f44dcc5014c9b6b947a47f4bc93e3ca94867000 Mon Sep 17 00:00:00 2001
From: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Date: Thu, 15 Jun 2017 11:36:06 -0400
Subject: [PATCH 1297/4131] drm/amdkfd: Make trap handler buffer RO

BUG: SWDEV-110763

Change-Id: I3e6881d1d22dd2192a23c9f78339d9c52feaf3d2
Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
---
 drivers/gpu/drm/amd/amdkfd/kfd_process.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
index 205aed4..d1ef118 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
@@ -120,7 +120,7 @@ static void kfd_process_free_gpuvm(struct kgd_mem *mem,
  */
 static int kfd_process_alloc_gpuvm(struct kfd_process *p,
 		struct kfd_dev *kdev, uint64_t gpu_va, uint32_t size,
-		void **kptr, struct kfd_process_device *pdd)
+		void **kptr, struct kfd_process_device *pdd, uint32_t flags)
 {
 	int err;
 	void *mem = NULL;
@@ -128,10 +128,7 @@ static int kfd_process_alloc_gpuvm(struct kfd_process *p,
 	err = kdev->kfd2kgd->alloc_memory_of_gpu(kdev->kgd, gpu_va, size,
 				pdd->vm,
 				(struct kgd_mem **)&mem, NULL, kptr,
-				ALLOC_MEM_FLAGS_GTT |
-				ALLOC_MEM_FLAGS_NONPAGED |
-				ALLOC_MEM_FLAGS_EXECUTE_ACCESS |
-				ALLOC_MEM_FLAGS_NO_SUBSTITUTE);
+				flags);
 	if (err)
 		goto err_alloc_mem;
 
@@ -177,6 +174,9 @@ static int kfd_process_reserve_ib_mem(struct kfd_process *p)
 	struct kfd_dev *kdev = NULL;
 	struct qcm_process_device *qpd = NULL;
 	void *kaddr;
+	uint32_t flags = ALLOC_MEM_FLAGS_GTT | ALLOC_MEM_FLAGS_NONPAGED |
+			 ALLOC_MEM_FLAGS_NO_SUBSTITUTE |
+			 ALLOC_MEM_FLAGS_EXECUTE_ACCESS;
 
 	list_for_each_entry_safe(pdd, temp, &p->per_device_data,
 				per_device_list) {
@@ -188,7 +188,7 @@ static int kfd_process_reserve_ib_mem(struct kfd_process *p)
 		if (qpd->ib_base) { /* is dGPU */
 			ret = kfd_process_alloc_gpuvm(p, kdev,
 				qpd->ib_base, kdev->ib_size,
-				&kaddr, pdd);
+				&kaddr, pdd, flags);
 			if (!ret)
 				qpd->ib_kaddr = kaddr;
 			else
@@ -505,6 +505,10 @@ static int kfd_process_init_cwsr(struct kfd_process *p, struct file *filep)
 	struct kfd_dev *dev = NULL;
 	struct qcm_process_device *qpd = NULL;
 	void *kaddr;
+	uint32_t flags = ALLOC_MEM_FLAGS_GTT | ALLOC_MEM_FLAGS_NONPAGED |
+			 ALLOC_MEM_FLAGS_NO_SUBSTITUTE |
+			 ALLOC_MEM_FLAGS_READONLY |
+			 ALLOC_MEM_FLAGS_EXECUTE_ACCESS;
 
 	list_for_each_entry_safe(pdd, temp, &p->per_device_data,
 				per_device_list) {
@@ -515,7 +519,7 @@ static int kfd_process_init_cwsr(struct kfd_process *p, struct file *filep)
 		if (qpd->cwsr_base) {
 			/* cwsr_base is only set for DGPU */
 			ret = kfd_process_alloc_gpuvm(p, dev, qpd->cwsr_base,
-					dev->cwsr_size,	&kaddr, pdd);
+					dev->cwsr_size,	&kaddr, pdd, flags);
 			if (!ret) {
 				qpd->cwsr_kaddr = kaddr;
 				qpd->tba_addr = qpd->cwsr_base;
-- 
2.7.4