From e348985cd3929db510235a3c1810ad6ad53d65d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 16 Aug 2022 11:47:47 -0400 Subject: [PATCH] winsys/amdgpu: change num_rejected_cs to a bool flag and don't increment the total sum after the first rejection Reviewed-by: Mihai Preda Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 9 +++++---- src/gallium/winsys/amdgpu/drm/amdgpu_cs.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index b97dff012a5..d550882f510 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -408,7 +408,7 @@ amdgpu_ctx_query_reset_status(struct radeon_winsys_ctx *rwctx, bool full_reset_o if (ctx->ws->num_total_rejected_cs > ctx->initial_num_total_rejected_cs) { if (needs_reset) *needs_reset = true; - return ctx->num_rejected_cs ? PIPE_GUILTY_CONTEXT_RESET : + return ctx->rejected_any_cs ? PIPE_GUILTY_CONTEXT_RESET : PIPE_INNOCENT_CONTEXT_RESET; } if (needs_reset) @@ -1606,7 +1606,7 @@ static void amdgpu_cs_submit_ib(void *job, void *gdata, int thread_index) assert(num_chunks <= ARRAY_SIZE(chunks)); - if (unlikely(acs->ctx->num_rejected_cs)) { + if (unlikely(acs->ctx->rejected_any_cs)) { r = -ECANCELED; } else if (unlikely(noop)) { r = 0; @@ -1659,8 +1659,9 @@ cleanup: } fprintf(stderr, "amdgpu: The CS has been rejected (%i). Recreate the context.\n", r); - acs->ctx->num_rejected_cs++; - ws->num_total_rejected_cs++; + if (!acs->ctx->rejected_any_cs) + ws->num_total_rejected_cs++; + acs->ctx->rejected_any_cs = true; } /* If there was an error, signal the fence, because it won't be signalled diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h index 25ec27945fc..13b8bf73d4f 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h @@ -45,7 +45,7 @@ struct amdgpu_ctx { uint64_t *user_fence_cpu_address_base; int refcount; unsigned initial_num_total_rejected_cs; - unsigned num_rejected_cs; + bool rejected_any_cs; }; struct amdgpu_cs_buffer {