From 5f44dcc5014c9b6b947a47f4bc93e3ca94867000 Mon Sep 17 00:00:00 2001 From: Harish Kasiviswanathan 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 --- 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