winsys/amdgpu: Limit usage of query_reset_state2
Following discussion on kernel mailing list[1], we are not gaining anything from using this to figure out if we reset, and it does not handle soft recovery. We will hear about the context loss and rationale when we submit. Instead, only use this for figuring out if the reset we already knew about was completed. [1]: https://lists.freedesktop.org/archives/amd-gfx/2024-January/103337.html Signed-off-by: Joshua Ashton <joshua@froggi.es> Reviewed-by: André Almeida <andrealmeid@igalia.com> Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27097>
This commit is contained in:
@@ -483,7 +483,6 @@ amdgpu_ctx_query_reset_status(struct radeon_winsys_ctx *rwctx, bool full_reset_o
|
||||
bool *needs_reset, bool *reset_completed)
|
||||
{
|
||||
struct amdgpu_ctx *ctx = (struct amdgpu_ctx*)rwctx;
|
||||
int r;
|
||||
|
||||
if (needs_reset)
|
||||
*needs_reset = false;
|
||||
@@ -500,12 +499,15 @@ amdgpu_ctx_query_reset_status(struct radeon_winsys_ctx *rwctx, bool full_reset_o
|
||||
return PIPE_NO_RESET;
|
||||
}
|
||||
|
||||
r = amdgpu_cs_query_reset_state2(ctx->ctx, &flags);
|
||||
if (r) {
|
||||
fprintf(stderr, "amdgpu: amdgpu_cs_query_reset_state2 failed. (%i)\n", r);
|
||||
return PIPE_NO_RESET;
|
||||
}
|
||||
|
||||
/*
|
||||
* ctx->sw_status is updated on alloc/ioctl failures.
|
||||
*
|
||||
* We only rely on amdgpu_cs_query_reset_state2 to tell us
|
||||
* that the context reset is complete.
|
||||
*/
|
||||
if (ctx->sw_status != PIPE_NO_RESET) {
|
||||
int r = amdgpu_cs_query_reset_state2(ctx->ctx, &flags);
|
||||
if (!r) {
|
||||
if (flags & AMDGPU_CTX_QUERY2_FLAGS_RESET) {
|
||||
if (reset_completed) {
|
||||
/* The ARB_robustness spec says:
|
||||
@@ -525,21 +527,17 @@ amdgpu_ctx_query_reset_status(struct radeon_winsys_ctx *rwctx, bool full_reset_o
|
||||
if (ctx->ws->info.drm_minor < 54 && ctx->ws->info.has_graphics)
|
||||
*reset_completed = amdgpu_submit_gfx_nop(ctx) == 0;
|
||||
}
|
||||
|
||||
if (needs_reset)
|
||||
*needs_reset = flags & AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST;
|
||||
if (flags & AMDGPU_CTX_QUERY2_FLAGS_GUILTY)
|
||||
return PIPE_GUILTY_CONTEXT_RESET;
|
||||
else
|
||||
return PIPE_INNOCENT_CONTEXT_RESET;
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "amdgpu: amdgpu_cs_query_reset_state2 failed. (%i)\n", r);
|
||||
}
|
||||
|
||||
/* Return a failure due to SW issues. */
|
||||
if (ctx->sw_status != PIPE_NO_RESET) {
|
||||
if (needs_reset)
|
||||
*needs_reset = true;
|
||||
return ctx->sw_status;
|
||||
}
|
||||
|
||||
if (needs_reset)
|
||||
*needs_reset = false;
|
||||
return PIPE_NO_RESET;
|
||||
|
Reference in New Issue
Block a user