Mesa (amdgpu): winsys/amdgpu: expose amdgpu_cs_query_reset_state to drivers

Marek Olšák mareko at kemper.freedesktop.org
Thu May 14 13:05:26 UTC 2015


Module: Mesa
Branch: amdgpu
Commit: 2de9b8b5ca85d0ba2c986e250942d4674d248cc9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2de9b8b5ca85d0ba2c986e250942d4674d248cc9

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Thu Apr 30 17:01:52 2015 +0200

winsys/amdgpu: expose amdgpu_cs_query_reset_state to drivers

Reviewed-by: Christian König <christian.koenig at amd.com>

---

 src/gallium/drivers/radeon/radeon_winsys.h |    5 +++++
 src/gallium/winsys/amdgpu/drm/amdgpu_cs.c  |   27 +++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/src/gallium/drivers/radeon/radeon_winsys.h b/src/gallium/drivers/radeon/radeon_winsys.h
index 863c332..a0645ef 100644
--- a/src/gallium/drivers/radeon/radeon_winsys.h
+++ b/src/gallium/drivers/radeon/radeon_winsys.h
@@ -532,6 +532,11 @@ struct radeon_winsys {
     void (*ctx_destroy)(struct radeon_winsys_ctx *ctx);
 
     /**
+     * Query a GPU reset status.
+     */
+    enum pipe_reset_status (*ctx_query_reset_status)(struct radeon_winsys_ctx *ctx);
+
+    /**
      * Create a command stream.
      *
      * \param ctx       The submission context
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
index d1ccb27..da8085c 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
@@ -149,6 +149,32 @@ static void amdgpu_ctx_destroy(struct radeon_winsys_ctx *rwctx)
    FREE(ctx);
 }
 
+static enum pipe_reset_status
+amdgpu_ctx_query_reset_status(struct radeon_winsys_ctx *rwctx)
+{
+   struct amdgpu_ctx *ctx = (struct amdgpu_ctx*)rwctx;
+   uint32_t result, hangs;
+   int r;
+
+   r = amdgpu_cs_query_reset_state(ctx->ctx, &result, &hangs);
+   if (r) {
+      fprintf(stderr, "amdgpu: amdgpu_cs_query_reset_state failed. (%i)\n", r);
+      return PIPE_NO_RESET;
+   }
+
+   switch (result) {
+   case AMDGPU_CTX_GUILTY_RESET:
+      return PIPE_GUILTY_CONTEXT_RESET;
+   case AMDGPU_CTX_INNOCENT_RESET:
+      return PIPE_INNOCENT_CONTEXT_RESET;
+   case AMDGPU_CTX_UNKNOWN_RESET:
+      return PIPE_UNKNOWN_CONTEXT_RESET;
+   case AMDGPU_CTX_NO_RESET:
+   default:
+      return PIPE_NO_RESET;
+   }
+}
+
 /* COMMAND SUBMISSION */
 
 static bool amdgpu_get_new_ib(struct amdgpu_cs *cs)
@@ -603,6 +629,7 @@ void amdgpu_cs_init_functions(struct amdgpu_winsys *ws)
 {
    ws->base.ctx_create = amdgpu_ctx_create;
    ws->base.ctx_destroy = amdgpu_ctx_destroy;
+   ws->base.ctx_query_reset_status = amdgpu_ctx_query_reset_status;
    ws->base.cs_create = amdgpu_cs_create;
    ws->base.cs_destroy = amdgpu_cs_destroy;
    ws->base.cs_add_reloc = amdgpu_cs_add_reloc;




More information about the mesa-commit mailing list