aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2003-drm-amdgpu-keep-copy-of-VRAM-lost-counter-in-job.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2003-drm-amdgpu-keep-copy-of-VRAM-lost-counter-in-job.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2003-drm-amdgpu-keep-copy-of-VRAM-lost-counter-in-job.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2003-drm-amdgpu-keep-copy-of-VRAM-lost-counter-in-job.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2003-drm-amdgpu-keep-copy-of-VRAM-lost-counter-in-job.patch
new file mode 100644
index 00000000..cfb12a4c
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2003-drm-amdgpu-keep-copy-of-VRAM-lost-counter-in-job.patch
@@ -0,0 +1,91 @@
+From 2d904ab0af12544a215f7f239e6fa34340935e4f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Mon, 9 Oct 2017 15:04:41 +0200
+Subject: [PATCH 2003/4131] drm/amdgpu: keep copy of VRAM lost counter in job
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Instead of reading the current counter from fpriv.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
+ drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 ++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 13 +++++++------
+ 3 files changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+index da8003e..bb9a760 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -1152,6 +1152,7 @@ struct amdgpu_job {
+ uint32_t gds_base, gds_size;
+ uint32_t gws_base, gws_size;
+ uint32_t oa_base, oa_size;
++ uint32_t vram_lost_counter;
+
+ /* user fence handling */
+ uint64_t uf_addr;
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+index dbc64be..a9a700c 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+@@ -178,6 +178,8 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
+ if (ret)
+ goto free_all_kdata;
+
++ p->job->vram_lost_counter = fpriv->vram_lost_counter;
++
+ if (p->uf_entry.robj)
+ p->job->uf_addr = uf_offset;
+ kfree(chunk_array);
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+index 83d1343..4f2b5ac 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+@@ -61,6 +61,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
+ (*job)->vm = vm;
+ (*job)->ibs = (void *)&(*job)[1];
+ (*job)->num_ibs = num_ibs;
++ (*job)->vram_lost_counter = atomic_read(&adev->vram_lost_counter);
+
+ amdgpu_sync_create(&(*job)->sync);
+ amdgpu_sync_create(&(*job)->dep_sync);
+@@ -180,8 +181,8 @@ static struct dma_fence *amdgpu_job_dependency(struct amd_sched_job *sched_job)
+ static struct dma_fence *amdgpu_job_run(struct amd_sched_job *sched_job)
+ {
+ struct dma_fence *fence = NULL;
++ struct amdgpu_device *adev;
+ struct amdgpu_job *job;
+- struct amdgpu_fpriv *fpriv = NULL;
+ int r;
+
+ if (!sched_job) {
+@@ -189,17 +190,17 @@ static struct dma_fence *amdgpu_job_run(struct amd_sched_job *sched_job)
+ return NULL;
+ }
+ job = to_amdgpu_job(sched_job);
++ adev = job->adev;
+
+ BUG_ON(amdgpu_sync_peek_fence(&job->sync, NULL));
+
+ trace_amdgpu_sched_run_job(job);
+- if (job->vm)
+- fpriv = container_of(job->vm, struct amdgpu_fpriv, vm);
+ /* skip ib schedule when vram is lost */
+- if (fpriv && amdgpu_kms_vram_lost(job->adev, fpriv))
++ if (job->vram_lost_counter != atomic_read(&adev->vram_lost_counter)) {
+ DRM_ERROR("Skip scheduling IBs!\n");
+- else {
+- r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, job, &fence);
++ } else {
++ r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, job,
++ &fence);
+ if (r)
+ DRM_ERROR("Error scheduling IBs (%d)\n", r);
+ }
+--
+2.7.4
+