diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0389-drm-amdgpu-make-sure-the-fence-is-emitted-before-rin.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0389-drm-amdgpu-make-sure-the-fence-is-emitted-before-rin.patch | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/common/recipes-kernel/linux/files/0389-drm-amdgpu-make-sure-the-fence-is-emitted-before-rin.patch b/common/recipes-kernel/linux/files/0389-drm-amdgpu-make-sure-the-fence-is-emitted-before-rin.patch deleted file mode 100644 index 846ee4d3..00000000 --- a/common/recipes-kernel/linux/files/0389-drm-amdgpu-make-sure-the-fence-is-emitted-before-rin.patch +++ /dev/null @@ -1,127 +0,0 @@ -From 4b559c90bc1870313f02cceef680884519af6b2b Mon Sep 17 00:00:00 2001 -From: Chunming Zhou <david1.zhou@amd.com> -Date: Tue, 21 Jul 2015 15:53:04 +0800 -Subject: [PATCH 0389/1050] drm/amdgpu: make sure the fence is emitted before - ring to get it. - -Signed-off-by: Chunming Zhou <david1.zhou@amd.com> -Acked-by: Christian K?nig <christian.koenig@amd.com> -Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 ++ - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 26 +++++++++----------------- - drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 10 ++++++++++ - drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c | 5 ++++- - 4 files changed, 25 insertions(+), 18 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index becb263..127867c 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -81,6 +81,7 @@ extern int amdgpu_vm_size; - extern int amdgpu_vm_block_size; - extern int amdgpu_enable_scheduler; - -+#define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 - #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */ - #define AMDGPU_FENCE_JIFFIES_TIMEOUT (HZ / 2) - /* AMDGPU_IB_POOL_SIZE must be a power of 2 */ -@@ -1239,6 +1240,7 @@ struct amdgpu_cs_parser { - /* user fence */ - struct amdgpu_user_fence uf; - -+ struct amdgpu_ring *ring; - struct mutex job_lock; - struct work_struct job_work; - int (*prepare_job)(struct amdgpu_cs_parser *sched_job); -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -index f9d4fe9..5f24038 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -@@ -915,7 +915,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) - goto out; - } else - parser->prepare_job = amdgpu_cs_parser_prepare_job; -- -+ parser->ring = ring; - parser->run_job = amdgpu_cs_parser_run_job; - parser->free_job = amdgpu_cs_parser_free_job; - amd_sched_push_job(ring->scheduler, -@@ -965,24 +965,16 @@ int amdgpu_cs_wait_ioctl(struct drm_device *dev, void *data, - ctx = amdgpu_ctx_get(filp->driver_priv, wait->in.ctx_id); - if (ctx == NULL) - return -EINVAL; -- if (amdgpu_enable_scheduler) { -- r = amd_sched_wait_ts(&ctx->rings[ring->idx].c_entity, -- wait->in.handle, true, timeout); -- if (r) -- return r; -- r = 1; -- } else { -- fence = amdgpu_ctx_get_fence(ctx, ring, wait->in.handle); -- if (IS_ERR(fence)) -- r = PTR_ERR(fence); - -- else if (fence) { -- r = fence_wait_timeout(fence, true, timeout); -- fence_put(fence); -+ fence = amdgpu_ctx_get_fence(ctx, ring, wait->in.handle); -+ if (IS_ERR(fence)) -+ r = PTR_ERR(fence); -+ else if (fence) { -+ r = fence_wait_timeout(fence, true, timeout); -+ fence_put(fence); -+ } else -+ r = 1; - -- } else -- r = 1; -- } - amdgpu_ctx_put(ctx); - if (r < 0) - return r; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c -index b9be250..41bc7fc 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c -@@ -261,6 +261,16 @@ struct fence *amdgpu_ctx_get_fence(struct amdgpu_ctx *ctx, - struct amdgpu_ctx_ring *cring = & ctx->rings[ring->idx]; - struct fence *fence; - uint64_t queued_seq; -+ int r; -+ -+ if (amdgpu_enable_scheduler) { -+ r = amd_sched_wait_emit(&cring->c_entity, -+ seq, -+ true, -+ AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS); -+ if (r) -+ return NULL; -+ } - - spin_lock(&ctx->ring_lock); - if (amdgpu_enable_scheduler) -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -index 1f7bf31..46ec915 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -@@ -56,12 +56,15 @@ static void amdgpu_sched_run_job(struct amd_gpu_scheduler *sched, - sched_job->filp); - if (r) - goto err; -- - if (sched_job->run_job) { - r = sched_job->run_job(sched_job); - if (r) - goto err; - } -+ atomic64_set(&c_entity->last_emitted_v_seq, -+ sched_job->uf.sequence); -+ wake_up_all(&c_entity->wait_emit); -+ - mutex_unlock(&sched_job->job_lock); - return; - err: --- -1.9.1 - |