[PATCH 3/6] drm/amdgpu:implement ctx query2
Christian König
ckoenig.leichtzumerken at gmail.com
Tue Oct 24 08:02:08 UTC 2017
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.Liu at amd.com>
Reviewed-by: Christian König <christian.koenig at 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
More information about the amd-gfx
mailing list