diff options
author | Marek Olšák <[email protected]> | 2017-01-19 20:44:49 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-01-23 23:43:38 +0100 |
commit | e248390e93d025472d55b89252216895bc895a74 (patch) | |
tree | 88a489d8c10cee9ff6b3655b0f7419a0e6fbbdcd /src/gallium | |
parent | 18408008609df9007dc40512f00c5700167c5887 (diff) |
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 <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 8 |
1 files changed, 7 insertions, 1 deletions
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); |