From: Marek Olšák Date: Thu, 19 Jan 2017 19:44:49 +0000 (+0100) Subject: winsys/amdgpu: drop all IBs if at least one was rejected within the context X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e248390e93d025472d55b89252216895bc895a74;p=mesa.git winsys/amdgpu: drop all IBs if at least one was rejected within the context The corruption is inevitable and hangs are possible too. Reviewed-by: Nicolai Hähnle --- diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index d63ff362a00..0bc4ce941b0 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -1039,11 +1039,17 @@ void amdgpu_cs_submit_ib(void *job, int thread_index) goto cleanup; } - r = amdgpu_cs_submit(acs->ctx->ctx, 0, &cs->request, 1); + if (acs->ctx->num_rejected_cs) + r = -ECANCELED; + else + r = amdgpu_cs_submit(acs->ctx->ctx, 0, &cs->request, 1); + cs->error_code = r; if (r) { if (r == -ENOMEM) fprintf(stderr, "amdgpu: Not enough memory for command submission.\n"); + else if (r == -ECANCELED) + fprintf(stderr, "amdgpu: The CS has been cancelled because the context is lost.\n"); else fprintf(stderr, "amdgpu: The CS has been rejected, " "see dmesg for more information (%i).\n", r);