aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3794-drm-amdgpu-allow-direct-submission-in-the-VM-backend.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3794-drm-amdgpu-allow-direct-submission-in-the-VM-backend.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3794-drm-amdgpu-allow-direct-submission-in-the-VM-backend.patch141
1 files changed, 141 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3794-drm-amdgpu-allow-direct-submission-in-the-VM-backend.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3794-drm-amdgpu-allow-direct-submission-in-the-VM-backend.patch
new file mode 100644
index 00000000..58d83a26
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3794-drm-amdgpu-allow-direct-submission-in-the-VM-backend.patch
@@ -0,0 +1,141 @@
+From ea045338c36f33e51a493279523a73951faeebaa Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Wed, 27 Mar 2019 13:16:18 +0100
+Subject: [PATCH 3794/4256] drm/amdgpu: allow direct submission in the VM
+ backends v2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This allows us to update page tables directly while in a page fault.
+
+v2: use direct/delayed entities and still wait for moves
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 5 +++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c | 16 ++++++-------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c | 25 +++++++++++----------
+ 3 files changed, 26 insertions(+), 20 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+index 8bb6d0a5c55d..7aa15714d600 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+@@ -201,6 +201,11 @@ struct amdgpu_vm_update_params {
+ */
+ struct amdgpu_vm *vm;
+
++ /**
++ * @direct: if changes should be made directly
++ */
++ bool direct;
++
+ /**
+ * @pages_addr:
+ *
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c
+index 5222d165abfc..a2daeadd770f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c
+@@ -49,13 +49,6 @@ static int amdgpu_vm_cpu_prepare(struct amdgpu_vm_update_params *p, void *owner,
+ {
+ int r;
+
+- /* Wait for PT BOs to be idle. PTs share the same resv. object
+- * as the root PD BO
+- */
+- r = amdgpu_bo_sync_wait(p->vm->root.base.bo, owner, true);
+- if (unlikely(r))
+- return r;
+-
+ /* Wait for any BO move to be completed */
+ if (exclusive) {
+ r = dma_fence_wait(exclusive, true);
+@@ -63,7 +56,14 @@ static int amdgpu_vm_cpu_prepare(struct amdgpu_vm_update_params *p, void *owner,
+ return r;
+ }
+
+- return 0;
++ /* Don't wait for submissions during page fault */
++ if (p->direct)
++ return 0;
++
++ /* Wait for PT BOs to be idle. PTs share the same resv. object
++ * as the root PD BO
++ */
++ return amdgpu_bo_sync_wait(p->vm->root.base.bo, owner, true);
+ }
+
+ /**
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c
+index d087d6650d79..38c966cedc26 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c
+@@ -68,17 +68,19 @@ static int amdgpu_vm_sdma_prepare(struct amdgpu_vm_update_params *p,
+ if (r)
+ return r;
+
++ p->num_dw_left = ndw;
++
++ /* Wait for moves to be completed */
+ r = amdgpu_sync_fence(p->adev, &p->job->sync, exclusive, false);
+ if (r)
+ return r;
+
+- r = amdgpu_sync_resv(p->adev, &p->job->sync, root->tbo.resv,
+- owner, false);
+- if (r)
+- return r;
++ /* Don't wait for any submissions during page fault handling */
++ if (p->direct)
++ return 0;
+
+- p->num_dw_left = ndw;
+- return 0;
++ return amdgpu_sync_resv(p->adev, &p->job->sync, root->tbo.resv,
++ owner, false);
+ }
+
+ /**
+@@ -95,23 +97,23 @@ static int amdgpu_vm_sdma_commit(struct amdgpu_vm_update_params *p,
+ {
+ struct amdgpu_bo *root = p->vm->root.base.bo;
+ struct amdgpu_ib *ib = p->job->ibs;
++ struct drm_sched_entity *entity;
+ struct amdgpu_ring *ring;
+ struct dma_fence *f;
+ int r;
+
+- ring = container_of(p->vm->delayed.rq->sched, struct amdgpu_ring,
+- sched);
++ entity = p->direct ? &p->vm->direct : &p->vm->delayed;
++ ring = container_of(entity->rq->sched, struct amdgpu_ring, sched);
+
+ WARN_ON(ib->length_dw == 0);
+ amdgpu_ring_pad_ib(ring, ib);
+ WARN_ON(ib->length_dw > p->num_dw_left);
+- r = amdgpu_job_submit(p->job, &p->vm->delayed,
+- AMDGPU_FENCE_OWNER_VM, &f);
++ r = amdgpu_job_submit(p->job, entity, AMDGPU_FENCE_OWNER_VM, &f);
+ if (r)
+ goto error;
+
+ amdgpu_bo_fence(root, f, true);
+- if (fence)
++ if (fence && !p->direct)
+ swap(*fence, f);
+ dma_fence_put(f);
+ return 0;
+@@ -121,7 +123,6 @@ static int amdgpu_vm_sdma_commit(struct amdgpu_vm_update_params *p,
+ return r;
+ }
+
+-
+ /**
+ * amdgpu_vm_sdma_copy_ptes - copy the PTEs from mapping
+ *
+--
+2.17.1
+