On older kernel the completion of the reset isn't signalled to userspace,
yet we need it to implement the EXT_robustness extension correctly.
In this situation, try to create a new context and submit a no-op job. If
the reset isn't done the kernel will reject the submission (-ECANCELED);
otherwise the submission will go through and we'll know that the reset is
done.
Reviewed-by: André Almeida <andrealmeid@igalia.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22290>
* completed. If a reset status is repeatedly returned, the context may
* be in the process of resetting.
*
+ * Starting with drm_minor >= 54 amdgpu reports if the reset is complete,
+ * so don't do anything special. On older kernels, submit a no-op cs. If it
+ * succeeds then assume the reset is complete.
*/
if (!(flags & AMDGPU_CTX_QUERY2_FLAGS_RESET_IN_PROGRESS))
*reset_completed = true;
+
+ if (ctx->ws->info.drm_minor < 54 && ctx->ws->info.has_graphics)
+ *reset_completed = amdgpu_submit_gfx_nop(ctx->ws->dev) == 0;
}
+
if (needs_reset)
*needs_reset = flags & AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST;
if (flags & AMDGPU_CTX_QUERY2_FLAGS_GUILTY)