Commit f11358da authored by Marek Olšák's avatar Marek Olšák Committed by Alex Deucher
Browse files

drm/amdgpu: remove unsafe context releasing



If ctx was released between put and get, then "get" would crash.

Signed-off-by: default avatarMarek Olšák <marek.olsak@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarJammy Zhou <Jammy.Zhou@amd.com>
parent a961ea73
Loading
Loading
Loading
Loading
+2 −10
Original line number Diff line number Diff line
@@ -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;
}