diff options
author | Monk Liu <Monk.Liu@amd.com> | 2017-10-17 02:58:01 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-12-04 16:33:12 -0500 |
commit | bc1b1bf6e347af908c9a994803e18e2e22cf84b3 (patch) | |
tree | 3715695971cd2df0c42609f25c836964d3d48aab /drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | |
parent | 668ca1b44de16a8182419cc1a5913d33cc6263bd (diff) |
drm/amdgpu:implement ctx query2
this query will give flag bits to indicate what happend
on the given context
Signed-off-by: Monk Liu <Monk.Liu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c index c539fb6a597e..d71dc164b469 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, | |||
227 | return 0; | 227 | return 0; |
228 | } | 228 | } |
229 | 229 | ||
230 | static int amdgpu_ctx_query2(struct amdgpu_device *adev, | ||
231 | struct amdgpu_fpriv *fpriv, uint32_t id, | ||
232 | union drm_amdgpu_ctx_out *out) | ||
233 | { | ||
234 | struct amdgpu_ctx *ctx; | ||
235 | struct amdgpu_ctx_mgr *mgr; | ||
236 | |||
237 | if (!fpriv) | ||
238 | return -EINVAL; | ||
239 | |||
240 | mgr = &fpriv->ctx_mgr; | ||
241 | mutex_lock(&mgr->lock); | ||
242 | ctx = idr_find(&mgr->ctx_handles, id); | ||
243 | if (!ctx) { | ||
244 | mutex_unlock(&mgr->lock); | ||
245 | return -EINVAL; | ||
246 | } | ||
247 | |||
248 | out->state.flags = 0x0; | ||
249 | out->state.hangs = 0x0; | ||
250 | |||
251 | if (ctx->reset_counter != atomic_read(&adev->gpu_reset_counter)) | ||
252 | out->state.flags |= AMDGPU_CTX_QUERY2_FLAGS_RESET; | ||
253 | |||
254 | if (ctx->vram_lost_counter != atomic_read(&adev->vram_lost_counter)) | ||
255 | out->state.flags |= AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST; | ||
256 | |||
257 | if (atomic_read(&ctx->guilty)) | ||
258 | out->state.flags |= AMDGPU_CTX_QUERY2_FLAGS_GUILTY; | ||
259 | |||
260 | mutex_unlock(&mgr->lock); | ||
261 | return 0; | ||
262 | } | ||
263 | |||
230 | int amdgpu_ctx_ioctl(struct drm_device *dev, void *data, | 264 | int amdgpu_ctx_ioctl(struct drm_device *dev, void *data, |
231 | struct drm_file *filp) | 265 | struct drm_file *filp) |
232 | { | 266 | { |
@@ -258,6 +292,9 @@ int amdgpu_ctx_ioctl(struct drm_device *dev, void *data, | |||
258 | case AMDGPU_CTX_OP_QUERY_STATE: | 292 | case AMDGPU_CTX_OP_QUERY_STATE: |
259 | r = amdgpu_ctx_query(adev, fpriv, id, &args->out); | 293 | r = amdgpu_ctx_query(adev, fpriv, id, &args->out); |
260 | break; | 294 | break; |
295 | case AMDGPU_CTX_OP_QUERY_STATE2: | ||
296 | r = amdgpu_ctx_query2(adev, fpriv, id, &args->out); | ||
297 | break; | ||
261 | default: | 298 | default: |
262 | return -EINVAL; | 299 | return -EINVAL; |
263 | } | 300 | } |