All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/amdgpu: only deinitialize initialized ib's.
@ 2015-08-20 20:51 Bas Nieuwenhuizen
  2015-08-20 20:51 ` [PATCH 2/2] drm/amdgpu: call amdgpu_cs_parser_fini at most once per parser Bas Nieuwenhuizen
  2015-08-21  8:13 ` [PATCH 1/2] drm/amdgpu: only deinitialize initialized ib's Christian König
  0 siblings, 2 replies; 3+ messages in thread
From: Bas Nieuwenhuizen @ 2015-08-20 20:51 UTC (permalink / raw
  To: dri-devel

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h    | 1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 2fc58e6..454d4e2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1250,6 +1250,7 @@ struct amdgpu_cs_parser {
 
 	struct amdgpu_ib	*ibs;
 	uint32_t		num_ibs;
+	uint32_t		num_initialized_ibs;
 
 	struct ww_acquire_ctx	ticket;
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index e4424b4..2c49dd4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -509,7 +509,7 @@ static void amdgpu_cs_parser_fini_late(struct amdgpu_cs_parser *parser)
 		drm_free_large(parser->chunks[i].kdata);
 	kfree(parser->chunks);
 	if (parser->ibs)
-		for (i = 0; i < parser->num_ibs; i++)
+		for (i = 0; i < parser->num_initialized_ibs; i++)
 			amdgpu_ib_free(parser->adev, &parser->ibs[i]);
 	kfree(parser->ibs);
 	if (parser->uf.bo)
@@ -708,6 +708,7 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
 		ib->length_dw = chunk_ib->ib_bytes / 4;
 		ib->flags = chunk_ib->flags;
 		ib->ctx = parser->ctx;
+                parser->num_initialized_ibs++;
 		j++;
 	}
 
-- 
2.5.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] drm/amdgpu: call amdgpu_cs_parser_fini at most once per parser.
  2015-08-20 20:51 [PATCH 1/2] drm/amdgpu: only deinitialize initialized ib's Bas Nieuwenhuizen
@ 2015-08-20 20:51 ` Bas Nieuwenhuizen
  2015-08-21  8:13 ` [PATCH 1/2] drm/amdgpu: only deinitialize initialized ib's Christian König
  1 sibling, 0 replies; 3+ messages in thread
From: Bas Nieuwenhuizen @ 2015-08-20 20:51 UTC (permalink / raw
  To: dri-devel

Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h    |  1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 16 +++++++---------
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 454d4e2..207d963 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1247,6 +1247,7 @@ struct amdgpu_cs_parser {
 	/* relocations */
 	struct amdgpu_bo_list_entry	*vm_bos;
 	struct list_head	validated;
+	bool			bos_reserved;
 
 	struct amdgpu_ib	*ibs;
 	uint32_t		num_ibs;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 2c49dd4..10ba301 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -369,6 +369,7 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p)
 	if (unlikely(r != 0)) {
 		return r;
 	}
+	p->bos_reserved = true;
 
 	list_for_each_entry(lobj, &p->validated, tv.head) {
 		bo = lobj->robj;
@@ -469,7 +470,7 @@ static int cmp_size_smaller_first(void *priv, struct list_head *a,
 	return (int)la->robj->tbo.num_pages - (int)lb->robj->tbo.num_pages;
 }
 
-static void amdgpu_cs_parser_fini_early(struct amdgpu_cs_parser *parser, int error, bool backoff)
+static void amdgpu_cs_parser_fini_early(struct amdgpu_cs_parser *parser, int error)
 {
 	if (!error) {
 		/* Sort the buffer list from the smallest to largest buffer,
@@ -487,7 +488,7 @@ static void amdgpu_cs_parser_fini_early(struct amdgpu_cs_parser *parser, int err
 		ttm_eu_fence_buffer_objects(&parser->ticket,
 				&parser->validated,
 				&parser->ibs[parser->num_ibs-1].fence->base);
-	} else if (backoff) {
+	} else if (parser->bos_reserved) {
 		ttm_eu_backoff_reservation(&parser->ticket,
 					   &parser->validated);
 	}
@@ -527,9 +528,9 @@ static void amdgpu_cs_parser_fini_late(struct amdgpu_cs_parser *parser)
  * If error is set than unvalidate buffer, otherwise just free memory
  * used by parsing context.
  **/
-static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser, int error, bool backoff)
+static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser, int error)
 {
-       amdgpu_cs_parser_fini_early(parser, error, backoff);
+       amdgpu_cs_parser_fini_early(parser, error);
        amdgpu_cs_parser_fini_late(parser);
 }
 
@@ -816,7 +817,6 @@ static int amdgpu_cs_parser_prepare_job(struct amdgpu_cs_parser *sched_job)
 	int r, i;
 	struct amdgpu_cs_parser *parser = sched_job;
 	struct amdgpu_device *adev = sched_job->adev;
-	bool reserved_buffers = false;
 
 	r = amdgpu_cs_parser_relocs(parser);
 	if (r) {
@@ -829,7 +829,6 @@ static int amdgpu_cs_parser_prepare_job(struct amdgpu_cs_parser *sched_job)
 	}
 
 	if (!r) {
-		reserved_buffers = true;
 		r = amdgpu_cs_ib_fill(adev, parser);
 	}
 	if (!r) {
@@ -838,7 +837,6 @@ static int amdgpu_cs_parser_prepare_job(struct amdgpu_cs_parser *sched_job)
 			DRM_ERROR("Failed in the dependencies handling %d!\n", r);
 	}
 	if (r) {
-		amdgpu_cs_parser_fini(parser, r, reserved_buffers);
 		return r;
 	}
 
@@ -894,7 +892,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
 	r = amdgpu_cs_parser_init(parser, data);
 	if (r) {
 		DRM_ERROR("Failed to initialize parser !\n");
-		amdgpu_cs_parser_fini(parser, r, false);
+		amdgpu_cs_parser_fini(parser, r);
 		up_read(&adev->exclusive_lock);
 		r = amdgpu_cs_handle_lockup(adev, r);
 		return r;
@@ -937,7 +935,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
 
 	cs->out.handle = parser->ibs[parser->num_ibs - 1].sequence;
 out:
-	amdgpu_cs_parser_fini(parser, r, true);
+	amdgpu_cs_parser_fini(parser, r);
 	up_read(&adev->exclusive_lock);
 	r = amdgpu_cs_handle_lockup(adev, r);
 	return r;
-- 
2.5.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] drm/amdgpu: only deinitialize initialized ib's.
  2015-08-20 20:51 [PATCH 1/2] drm/amdgpu: only deinitialize initialized ib's Bas Nieuwenhuizen
  2015-08-20 20:51 ` [PATCH 2/2] drm/amdgpu: call amdgpu_cs_parser_fini at most once per parser Bas Nieuwenhuizen
@ 2015-08-21  8:13 ` Christian König
  1 sibling, 0 replies; 3+ messages in thread
From: Christian König @ 2015-08-21  8:13 UTC (permalink / raw
  To: Bas Nieuwenhuizen, dri-devel

On 20.08.2015 22:51, Bas Nieuwenhuizen wrote:
> Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>

Thanks for the help, but I've addressed both bugs internally already and 
they are just waiting for public release.

Not sure which patches Alex are going to pick now.

In general it looks like we should probably move our internal 
discussions and patches to the public.

Going to kick this of,
Christian.

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu.h    | 1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 3 ++-
>   2 files changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 2fc58e6..454d4e2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1250,6 +1250,7 @@ struct amdgpu_cs_parser {
>   
>   	struct amdgpu_ib	*ibs;
>   	uint32_t		num_ibs;
> +	uint32_t		num_initialized_ibs;
>   
>   	struct ww_acquire_ctx	ticket;
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index e4424b4..2c49dd4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -509,7 +509,7 @@ static void amdgpu_cs_parser_fini_late(struct amdgpu_cs_parser *parser)
>   		drm_free_large(parser->chunks[i].kdata);
>   	kfree(parser->chunks);
>   	if (parser->ibs)
> -		for (i = 0; i < parser->num_ibs; i++)
> +		for (i = 0; i < parser->num_initialized_ibs; i++)
>   			amdgpu_ib_free(parser->adev, &parser->ibs[i]);
>   	kfree(parser->ibs);
>   	if (parser->uf.bo)
> @@ -708,6 +708,7 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
>   		ib->length_dw = chunk_ib->ib_bytes / 4;
>   		ib->flags = chunk_ib->flags;
>   		ib->ctx = parser->ctx;
> +                parser->num_initialized_ibs++;
>   		j++;
>   	}
>   

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-08-21  8:14 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-20 20:51 [PATCH 1/2] drm/amdgpu: only deinitialize initialized ib's Bas Nieuwenhuizen
2015-08-20 20:51 ` [PATCH 2/2] drm/amdgpu: call amdgpu_cs_parser_fini at most once per parser Bas Nieuwenhuizen
2015-08-21  8:13 ` [PATCH 1/2] drm/amdgpu: only deinitialize initialized ib's Christian König

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.