All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chunming Zhou <David1.Zhou-5C7GfCeVMHo@public.gmane.org>
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Cc: Chunming Zhou <David1.Zhou-5C7GfCeVMHo@public.gmane.org>,
	David.Mao-5C7GfCeVMHo@public.gmane.org
Subject: [PATCH 1/6] drm/amdgpu: use global ctx mgr instead of vm specified
Date: Thu, 18 Aug 2016 15:50:13 +0800	[thread overview]
Message-ID: <1471506618-29849-2-git-send-email-David1.Zhou@amd.com> (raw)
In-Reply-To: <1471506618-29849-1-git-send-email-David1.Zhou-5C7GfCeVMHo@public.gmane.org>

ctx id will be used across process and across device.

Change-Id: I3f4f99b75f457d60ae0e5c2a9ab126dff6f3418f
Signed-off-by: Chunming Zhou <David1.Zhou@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 59 +++++++++++----------------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c |  3 ++
 2 files changed, 23 insertions(+), 39 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index 17e1362..bd74a57 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -25,6 +25,9 @@
 #include <drm/drmP.h>
 #include "amdgpu.h"
 
+static DEFINE_MUTEX(amdgpu_ctx_lock);
+extern struct idr amdgpu_ctx_idr;
+
 static int amdgpu_ctx_init(struct amdgpu_device *adev, struct amdgpu_ctx *ctx)
 {
 	unsigned i, j;
@@ -87,7 +90,6 @@ static int amdgpu_ctx_alloc(struct amdgpu_device *adev,
 			    struct amdgpu_fpriv *fpriv,
 			    uint32_t *id)
 {
-	struct amdgpu_ctx_mgr *mgr = &fpriv->ctx_mgr;
 	struct amdgpu_ctx *ctx;
 	int r;
 
@@ -95,21 +97,21 @@ static int amdgpu_ctx_alloc(struct amdgpu_device *adev,
 	if (!ctx)
 		return -ENOMEM;
 
-	mutex_lock(&mgr->lock);
-	r = idr_alloc(&mgr->ctx_handles, ctx, 1, 0, GFP_KERNEL);
+	mutex_lock(&amdgpu_ctx_lock);
+	r = idr_alloc(&amdgpu_ctx_idr, ctx, 1, 0, GFP_KERNEL);
 	if (r < 0) {
-		mutex_unlock(&mgr->lock);
+		mutex_unlock(&amdgpu_ctx_lock);
 		kfree(ctx);
 		return r;
 	}
 	*id = (uint32_t)r;
 	r = amdgpu_ctx_init(adev, ctx);
 	if (r) {
-		idr_remove(&mgr->ctx_handles, *id);
+		idr_remove(&amdgpu_ctx_idr, *id);
 		*id = 0;
 		kfree(ctx);
 	}
-	mutex_unlock(&mgr->lock);
+	mutex_unlock(&amdgpu_ctx_lock);
 	return r;
 }
 
@@ -126,18 +128,17 @@ static void amdgpu_ctx_do_release(struct kref *ref)
 
 static int amdgpu_ctx_free(struct amdgpu_fpriv *fpriv, uint32_t id)
 {
-	struct amdgpu_ctx_mgr *mgr = &fpriv->ctx_mgr;
 	struct amdgpu_ctx *ctx;
 
-	mutex_lock(&mgr->lock);
-	ctx = idr_find(&mgr->ctx_handles, id);
+	mutex_lock(&amdgpu_ctx_lock);
+	ctx = idr_find(&amdgpu_ctx_idr, id);
 	if (ctx) {
-		idr_remove(&mgr->ctx_handles, id);
+		idr_remove(&amdgpu_ctx_idr, id);
 		kref_put(&ctx->refcount, amdgpu_ctx_do_release);
-		mutex_unlock(&mgr->lock);
+		mutex_unlock(&amdgpu_ctx_lock);
 		return 0;
 	}
-	mutex_unlock(&mgr->lock);
+	mutex_unlock(&amdgpu_ctx_lock);
 	return -EINVAL;
 }
 
@@ -146,17 +147,15 @@ static int amdgpu_ctx_query(struct amdgpu_device *adev,
 			    union drm_amdgpu_ctx_out *out)
 {
 	struct amdgpu_ctx *ctx;
-	struct amdgpu_ctx_mgr *mgr;
 	unsigned reset_counter;
 
 	if (!fpriv)
 		return -EINVAL;
 
-	mgr = &fpriv->ctx_mgr;
-	mutex_lock(&mgr->lock);
-	ctx = idr_find(&mgr->ctx_handles, id);
+	mutex_lock(&amdgpu_ctx_lock);
+	ctx = idr_find(&amdgpu_ctx_idr, id);
 	if (!ctx) {
-		mutex_unlock(&mgr->lock);
+		mutex_unlock(&amdgpu_ctx_lock);
 		return -EINVAL;
 	}
 
@@ -173,7 +172,7 @@ static int amdgpu_ctx_query(struct amdgpu_device *adev,
 		out->state.reset_status = AMDGPU_CTX_UNKNOWN_RESET;
 	ctx->reset_counter = reset_counter;
 
-	mutex_unlock(&mgr->lock);
+	mutex_unlock(&amdgpu_ctx_lock);
 	return 0;
 }
 
@@ -211,18 +210,15 @@ int amdgpu_ctx_ioctl(struct drm_device *dev, void *data,
 struct amdgpu_ctx *amdgpu_ctx_get(struct amdgpu_fpriv *fpriv, uint32_t id)
 {
 	struct amdgpu_ctx *ctx;
-	struct amdgpu_ctx_mgr *mgr;
 
 	if (!fpriv)
 		return NULL;
 
-	mgr = &fpriv->ctx_mgr;
-
-	mutex_lock(&mgr->lock);
-	ctx = idr_find(&mgr->ctx_handles, id);
+	mutex_lock(&amdgpu_ctx_lock);
+	ctx = idr_find(&amdgpu_ctx_idr, id);
 	if (ctx)
 		kref_get(&ctx->refcount);
-	mutex_unlock(&mgr->lock);
+	mutex_unlock(&amdgpu_ctx_lock);
 	return ctx;
 }
 
@@ -291,23 +287,8 @@ struct fence *amdgpu_ctx_get_fence(struct amdgpu_ctx *ctx,
 
 void amdgpu_ctx_mgr_init(struct amdgpu_ctx_mgr *mgr)
 {
-	mutex_init(&mgr->lock);
-	idr_init(&mgr->ctx_handles);
 }
 
 void amdgpu_ctx_mgr_fini(struct amdgpu_ctx_mgr *mgr)
 {
-	struct amdgpu_ctx *ctx;
-	struct idr *idp;
-	uint32_t id;
-
-	idp = &mgr->ctx_handles;
-
-	idr_for_each_entry(idp, ctx, id) {
-		if (kref_put(&ctx->refcount, amdgpu_ctx_do_release) != 1)
-			DRM_ERROR("ctx %p is still alive\n", ctx);
-	}
-
-	idr_destroy(&mgr->ctx_handles);
-	mutex_destroy(&mgr->lock);
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 209a539..222da53 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -334,6 +334,8 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
 
 static struct drm_driver kms_driver;
 
+struct idr amdgpu_ctx_idr;
+
 static int amdgpu_kick_out_firmware_fb(struct pci_dev *pdev)
 {
 	struct apertures_struct *ap;
@@ -624,6 +626,7 @@ static int __init amdgpu_init(void)
 	pdriver = &amdgpu_kms_pci_driver;
 	driver->num_ioctls = amdgpu_max_kms_ioctl;
 	amdgpu_register_atpx_handler();
+	idr_init(&amdgpu_ctx_idr);
 	/* let modprobe override vga console setting */
 	return drm_pci_init(driver, pdriver);
 }
-- 
1.9.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

  parent reply	other threads:[~2016-08-18  7:50 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-18  7:50 [PATCH 0/6] make ctx mgr global Chunming Zhou
     [not found] ` <1471506618-29849-1-git-send-email-David1.Zhou-5C7GfCeVMHo@public.gmane.org>
2016-08-18  7:50   ` Chunming Zhou [this message]
2016-08-18  7:50   ` [PATCH 2/6] drm/amdgpu: clean up for amdgpu ctx Chunming Zhou
2016-08-18  7:50   ` [PATCH 3/6] drm/amdgpu: allocate progressively higher ids for ctx until idr counter wraps Chunming Zhou
2016-08-18  7:50   ` [PATCH 4/6] drm/amdgpu: ctx id should be removed when ctx is freed Chunming Zhou
2016-08-18  7:50   ` [PATCH 5/6] drm/amdgpu: use fence-array for ctx release Chunming Zhou
     [not found]     ` <1471506618-29849-6-git-send-email-David1.Zhou-5C7GfCeVMHo@public.gmane.org>
2016-08-21  6:42       ` Edward O'Callaghan
     [not found]         ` <56580e14-9d77-f85c-20ce-a32971d9bce2-dczkZgxz+BNUPWh3PAxdjQ@public.gmane.org>
2016-08-22  2:24           ` zhoucm1
2016-08-18  7:50   ` [PATCH 6/6] drm/amdgpu: dependency is already signaled if ctx has been freed Chunming Zhou
2016-08-18  8:15   ` [PATCH 0/6] make ctx mgr global Christian König
     [not found]     ` <3e0bb599-e8e3-2e66-909f-ed75ac87ab56-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
2016-08-24  9:33       ` zhoucm1
     [not found]         ` <57BD69E4.9000609-5C7GfCeVMHo@public.gmane.org>
2016-08-24  9:39           ` Christian König
     [not found]             ` <ca1f322f-4c1e-c3cc-3a6d-7bab42d1fe41-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
2016-08-24 10:01               ` zhoucm1
     [not found]                 ` <57BD7062.60408-5C7GfCeVMHo@public.gmane.org>
2016-08-24 10:06                   ` Christian König
2016-08-24 10:45   ` Liu, Monk
     [not found]     ` <MWHPR12MB11825F3995323EB96C7E867984EA0-Gy0DoCVfaSVhjnLHdLm0OQdYzm3356FpvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2016-08-24 12:20       ` Christian König
     [not found]         ` <df5ad8b0-a4b7-002d-732b-4cda97698199-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
2016-08-25  3:38           ` Liu, Monk
     [not found]             ` <DM5PR12MB1178059E79C688636B77BD5584ED0-2J9CzHegvk8I8PWcjD5QtQdYzm3356FpvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2016-08-25  8:08               ` Christian König
     [not found]                 ` <41c5e1d7-3903-0184-155b-2b3953f5cfa6-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
2016-08-25  8:21                   ` Liu, Monk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1471506618-29849-2-git-send-email-David1.Zhou@amd.com \
    --to=david1.zhou-5c7gfcevmho@public.gmane.org \
    --cc=David.Mao-5C7GfCeVMHo@public.gmane.org \
    --cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.