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
|