aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0191-drm-amdgpu-remove-unsafe-context-releasing.patch
blob: 9a3e08c46da8b15e82a0f50fc61b92898fea2d3b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
From f11358daa93a8ae9fdee5cfe6ef7a0ed0027edee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com>
Date: Tue, 5 May 2015 00:56:45 +0200
Subject: [PATCH 0191/1050] drm/amdgpu: remove unsafe context releasing
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

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>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 12 ++----------
 1 file 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 235010a..ffb13a6 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;
 }
-- 
1.9.1