aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/5027-drm-amdgpu-add-new-amdgpu_vm_bo_trace_cs-function-v2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5027-drm-amdgpu-add-new-amdgpu_vm_bo_trace_cs-function-v2.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/5027-drm-amdgpu-add-new-amdgpu_vm_bo_trace_cs-function-v2.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5027-drm-amdgpu-add-new-amdgpu_vm_bo_trace_cs-function-v2.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5027-drm-amdgpu-add-new-amdgpu_vm_bo_trace_cs-function-v2.patch
new file mode 100644
index 00000000..b8fb2957
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5027-drm-amdgpu-add-new-amdgpu_vm_bo_trace_cs-function-v2.patch
@@ -0,0 +1,116 @@
+From 976785ec319cfadd17f5ead410d84bec162dbcb4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Fri, 27 Jul 2018 16:56:34 +0200
+Subject: [PATCH 5027/5725] drm/amdgpu: add new amdgpu_vm_bo_trace_cs()
+ function v2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This allows us to trace all VM ranges which should be valid inside a CS.
+
+v2: dump mappings without BO as well
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
+Reviewed-and-tested-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> (v1)
+Reviewed-by: Huang Rui <ray.huang@amd.com> (v1)
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 ++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | 5 +++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 29 +++++++++++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 1 +
+ 4 files changed, 37 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+index fae6b58..08cb8f5 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+@@ -1225,6 +1225,7 @@ static void amdgpu_cs_post_dependencies(struct amdgpu_cs_parser *p)
+ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
+ union drm_amdgpu_cs *cs)
+ {
++ struct amdgpu_fpriv *fpriv = p->filp->driver_priv;
+ struct amdgpu_ring *ring = p->ring;
+ struct drm_sched_entity *entity = &p->ctx->rings[ring->idx].entity;
+ enum drm_sched_priority priority;
+@@ -1277,6 +1278,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
+ amdgpu_job_free_resources(job);
+
+ trace_amdgpu_cs_ioctl(job);
++ amdgpu_vm_bo_trace_cs(&fpriv->vm, &p->ticket);
+ priority = job->base.s_priority;
+ drm_sched_entity_push_job(&job->base, entity);
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
+index 11f262f..7206a00 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
+@@ -314,6 +314,11 @@ DEFINE_EVENT(amdgpu_vm_mapping, amdgpu_vm_bo_mapping,
+ TP_ARGS(mapping)
+ );
+
++DEFINE_EVENT(amdgpu_vm_mapping, amdgpu_vm_bo_cs,
++ TP_PROTO(struct amdgpu_bo_va_mapping *mapping),
++ TP_ARGS(mapping)
++);
++
+ TRACE_EVENT(amdgpu_vm_set_ptes,
+ TP_PROTO(uint64_t pe, uint64_t addr, unsigned count,
+ uint32_t incr, uint64_t flags),
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index 852956c..5de844d 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -2357,6 +2357,35 @@ struct amdgpu_bo_va_mapping *amdgpu_vm_bo_lookup_mapping(struct amdgpu_vm *vm,
+ }
+
+ /**
++ * amdgpu_vm_bo_trace_cs - trace all reserved mappings
++ *
++ * @vm: the requested vm
++ * @ticket: CS ticket
++ *
++ * Trace all mappings of BOs reserved during a command submission.
++ */
++void amdgpu_vm_bo_trace_cs(struct amdgpu_vm *vm, struct ww_acquire_ctx *ticket)
++{
++ struct amdgpu_bo_va_mapping *mapping;
++
++ if (!trace_amdgpu_vm_bo_cs_enabled())
++ return;
++
++ for (mapping = amdgpu_vm_it_iter_first(&vm->va, 0, U64_MAX); mapping;
++ mapping = amdgpu_vm_it_iter_next(mapping, 0, U64_MAX)) {
++ if (mapping->bo_va && mapping->bo_va->base.bo) {
++ struct amdgpu_bo *bo;
++
++ bo = mapping->bo_va->base.bo;
++ if (READ_ONCE(bo->tbo.resv->lock.ctx) != ticket)
++ continue;
++ }
++
++ trace_amdgpu_vm_bo_cs(mapping);
++ }
++}
++
++/**
+ * amdgpu_vm_bo_rmv - remove a bo to a specific vm
+ *
+ * @adev: amdgpu_device pointer
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+index 9f70db6..a5cf0cc 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+@@ -324,6 +324,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,
+ uint64_t saddr, uint64_t size);
+ struct amdgpu_bo_va_mapping *amdgpu_vm_bo_lookup_mapping(struct amdgpu_vm *vm,
+ uint64_t addr);
++void amdgpu_vm_bo_trace_cs(struct amdgpu_vm *vm, struct ww_acquire_ctx *ticket);
+ void amdgpu_vm_bo_rmv(struct amdgpu_device *adev,
+ struct amdgpu_bo_va *bo_va);
+ void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t vm_size,
+--
+2.7.4
+