diff options
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.patch | 91 |
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 + |