Am 24.10.2017 um 07:57 schrieb Monk Liu:
this query will give flag bits to indicate what happend
on the given context

Change-Id: I638efef736de77519388199d000ca8f62b4dc89a
Signed-off-by: Monk Liu <monk....@amd.com>

Reviewed-by: Christian König <christian.koe...@amd.com>

---
  drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 37 +++++++++++++++++++++++++++++++++
  include/uapi/drm/amdgpu_drm.h           |  8 +++++++
  2 files changed, 45 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index c539fb6..d71dc16 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -227,6 +227,40 @@ static int amdgpu_ctx_query(struct amdgpu_device *adev,
        return 0;
  }
+static int amdgpu_ctx_query2(struct amdgpu_device *adev,
+       struct amdgpu_fpriv *fpriv, uint32_t id,
+       union drm_amdgpu_ctx_out *out)
+{
+       struct amdgpu_ctx *ctx;
+       struct amdgpu_ctx_mgr *mgr;
+
+       if (!fpriv)
+               return -EINVAL;
+
+       mgr = &fpriv->ctx_mgr;
+       mutex_lock(&mgr->lock);
+       ctx = idr_find(&mgr->ctx_handles, id);
+       if (!ctx) {
+               mutex_unlock(&mgr->lock);
+               return -EINVAL;
+       }
+
+       out->state.flags = 0x0;
+       out->state.hangs = 0x0;
+
+       if (ctx->reset_counter != atomic_read(&adev->gpu_reset_counter))
+               out->state.flags |= AMDGPU_CTX_QUERY2_FLAGS_RESET;
+
+       if (ctx->vram_lost_counter != atomic_read(&adev->vram_lost_counter))
+               out->state.flags |= AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST;
+
+       if (atomic_read(&ctx->guilty))
+               out->state.flags |= AMDGPU_CTX_QUERY2_FLAGS_GUILTY;
+
+       mutex_unlock(&mgr->lock);
+       return 0;
+}
+
  int amdgpu_ctx_ioctl(struct drm_device *dev, void *data,
                     struct drm_file *filp)
  {
@@ -258,6 +292,9 @@ int amdgpu_ctx_ioctl(struct drm_device *dev, void *data,
        case AMDGPU_CTX_OP_QUERY_STATE:
                r = amdgpu_ctx_query(adev, fpriv, id, &args->out);
                break;
+       case AMDGPU_CTX_OP_QUERY_STATE2:
+               r = amdgpu_ctx_query2(adev, fpriv, id, &args->out);
+               break;
        default:
                return -EINVAL;
        }
diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
index 74f0b5d..f7a4cf1 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -163,6 +163,7 @@ union drm_amdgpu_bo_list {
  #define AMDGPU_CTX_OP_ALLOC_CTX       1
  #define AMDGPU_CTX_OP_FREE_CTX        2
  #define AMDGPU_CTX_OP_QUERY_STATE     3
+#define AMDGPU_CTX_OP_QUERY_STATE2     4
/* GPU reset status */
  #define AMDGPU_CTX_NO_RESET           0
@@ -173,6 +174,13 @@ union drm_amdgpu_bo_list {
  /* unknown cause */
  #define AMDGPU_CTX_UNKNOWN_RESET      3
+/* indicate gpu reset occured after ctx created */
+#define AMDGPU_CTX_QUERY2_FLAGS_RESET    (1<<0)
+/* indicate vram lost occured after ctx created */
+#define AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST (1<<1)
+/* indicate some job from this context once cause gpu hang */
+#define AMDGPU_CTX_QUERY2_FLAGS_GUILTY   (1<<2)
+
  /* Context priority level */
  #define AMDGPU_CTX_PRIORITY_UNSET       -2048
  #define AMDGPU_CTX_PRIORITY_VERY_LOW    -1023


_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to