summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2015-05-05 01:56:45 +0300
committerAlex Deucher <alexander.deucher@amd.com>2015-06-04 04:03:27 +0300
commitf11358daa93a8ae9fdee5cfe6ef7a0ed0027edee (patch)
tree7ae6c7cf6be383628f28effe66698dd4106b4beb /drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
parenta961ea7349d08d5962b6a619f2c2cca670da41ed (diff)
downloadlinux-f11358daa93a8ae9fdee5cfe6ef7a0ed0027edee.tar.xz
drm/amdgpu: remove unsafe context releasing
If ctx was released between put and get, then "get" would crash. Signed-off-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c12
1 files changed, 2 insertions, 10 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index 235010a83f8f..ffb13a66e288 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -69,7 +69,6 @@ int amdgpu_ctx_alloc(struct amdgpu_device *adev, struct amdgpu_fpriv *fpriv, uin
int amdgpu_ctx_free(struct amdgpu_device *adev, struct amdgpu_fpriv *fpriv, uint32_t id)
{
- int r;
struct amdgpu_ctx *ctx;
struct amdgpu_ctx_mgr *mgr = &fpriv->ctx_mgr;
@@ -77,15 +76,8 @@ int amdgpu_ctx_free(struct amdgpu_device *adev, struct amdgpu_fpriv *fpriv, uint
ctx = idr_find(&mgr->ctx_handles, id);
rcu_read_unlock();
if (ctx) {
- /* if no task is pending on this context, free it */
- r = kref_put(&ctx->refcount, amdgpu_ctx_do_release);
- if (r == 1)
- return 0;//context is removed successfully
- else {
- /* context is still in using */
- kref_get(&ctx->refcount);
- return -ERESTARTSYS;
- }
+ kref_put(&ctx->refcount, amdgpu_ctx_do_release);
+ return 0;
}
return -EINVAL;
}