All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/amdgpu: amdgpu_ctx_add_fence can't fail
@ 2018-08-24 12:50 Christian König
       [not found] ` <20180824125016.1315-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 5+ messages in thread
From: Christian König @ 2018-08-24 12:50 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: mhocko-DgEjT+Ai2ygdnm+yROfE0A

No more waiting for a fence done here.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c  | 10 +---------
 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c |  8 +++-----
 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h |  6 +++---
 3 files changed, 7 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index fd3902983195..80ad23061f1c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1217,15 +1217,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
 	job->owner = p->filp;
 	p->fence = dma_fence_get(&job->base.s_fence->finished);
 
-	r = amdgpu_ctx_add_fence(p->ctx, entity, p->fence, &seq);
-	if (r) {
-		dma_fence_put(p->fence);
-		dma_fence_put(&job->base.s_fence->finished);
-		amdgpu_job_free(job);
-		amdgpu_mn_unlock(p->mn);
-		return r;
-	}
-
+	amdgpu_ctx_add_fence(p->ctx, entity, p->fence, &seq);
 	amdgpu_cs_post_dependencies(p);
 
 	if ((job->preamble_status & AMDGPU_PREAMBLE_IB_PRESENT) &&
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index 987b7f256463..f9b54236102d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -434,9 +434,9 @@ int amdgpu_ctx_put(struct amdgpu_ctx *ctx)
 	return 0;
 }
 
-int amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
-			 struct drm_sched_entity *entity,
-			 struct dma_fence *fence, uint64_t* handle)
+void amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
+			  struct drm_sched_entity *entity,
+			  struct dma_fence *fence, uint64_t* handle)
 {
 	struct amdgpu_ctx_entity *centity = to_amdgpu_ctx_entity(entity);
 	uint64_t seq = centity->sequence;
@@ -458,8 +458,6 @@ int amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
 	dma_fence_put(other);
 	if (handle)
 		*handle = seq;
-
-	return 0;
 }
 
 struct dma_fence *amdgpu_ctx_get_fence(struct amdgpu_ctx *ctx,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
index d67c1d285a4f..b3b012c0a7da 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
@@ -65,9 +65,9 @@ int amdgpu_ctx_put(struct amdgpu_ctx *ctx);
 
 int amdgpu_ctx_get_entity(struct amdgpu_ctx *ctx, u32 hw_ip, u32 instance,
 			  u32 ring, struct drm_sched_entity **entity);
-int amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
-			 struct drm_sched_entity *entity,
-			 struct dma_fence *fence, uint64_t *seq);
+void amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
+			  struct drm_sched_entity *entity,
+			  struct dma_fence *fence, uint64_t *seq);
 struct dma_fence *amdgpu_ctx_get_fence(struct amdgpu_ctx *ctx,
 				       struct drm_sched_entity *entity,
 				       uint64_t seq);
-- 
2.17.1

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

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

* [PATCH 2/2] drm/amdgpu: fix holding mn_lock while allocating memory
       [not found] ` <20180824125016.1315-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
@ 2018-08-24 12:50   ` Christian König
       [not found]     ` <20180824125016.1315-2-christian.koenig-5C7GfCeVMHo@public.gmane.org>
  2018-08-24 13:24   ` [PATCH 1/2] drm/amdgpu: amdgpu_ctx_add_fence can't fail Chunming Zhou
  2018-08-27  2:09   ` Zhang, Jerry (Junwei)
  2 siblings, 1 reply; 5+ messages in thread
From: Christian König @ 2018-08-24 12:50 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: mhocko-DgEjT+Ai2ygdnm+yROfE0A

We can't hold the mn_lock while allocating memory.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 30 +++++++++++++++-----------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 80ad23061f1c..34d18d9dfcbd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1194,26 +1194,23 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
 
 	int r;
 
+	job = p->job;
+	p->job = NULL;
+
+	r = drm_sched_job_init(&job->base, entity, p->filp);
+	if (r)
+		goto error_unlock;
+
 	amdgpu_mn_lock(p->mn);
 	amdgpu_bo_list_for_each_userptr_entry(e, p->bo_list) {
 		struct amdgpu_bo *bo = e->robj;
 
 		if (amdgpu_ttm_tt_userptr_needs_pages(bo->tbo.ttm)) {
-			amdgpu_mn_unlock(p->mn);
-			return -ERESTARTSYS;
+			r = -ERESTARTSYS;
+			goto error_abort;
 		}
 	}
 
-	job = p->job;
-	p->job = NULL;
-
-	r = drm_sched_job_init(&job->base, entity, p->filp);
-	if (r) {
-		amdgpu_job_free(job);
-		amdgpu_mn_unlock(p->mn);
-		return r;
-	}
-
 	job->owner = p->filp;
 	p->fence = dma_fence_get(&job->base.s_fence->finished);
 
@@ -1243,6 +1240,15 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
 	amdgpu_mn_unlock(p->mn);
 
 	return 0;
+
+error_abort:
+	dma_fence_put(&job->base.s_fence->finished);
+	job->base.s_fence = NULL;
+
+error_unlock:
+	amdgpu_job_free(job);
+	amdgpu_mn_unlock(p->mn);
+	return r;
 }
 
 int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
-- 
2.17.1

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

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

* Re: [PATCH 1/2] drm/amdgpu: amdgpu_ctx_add_fence can't fail
       [not found] ` <20180824125016.1315-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
  2018-08-24 12:50   ` [PATCH 2/2] drm/amdgpu: fix holding mn_lock while allocating memory Christian König
@ 2018-08-24 13:24   ` Chunming Zhou
  2018-08-27  2:09   ` Zhang, Jerry (Junwei)
  2 siblings, 0 replies; 5+ messages in thread
From: Chunming Zhou @ 2018-08-24 13:24 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW



在 2018/8/24 20:50, Christian König 写道:
> No more waiting for a fence done here.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Chunming Zhou <david1.zhou@amd.com>


> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c  | 10 +---------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c |  8 +++-----
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h |  6 +++---
>   3 files changed, 7 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index fd3902983195..80ad23061f1c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -1217,15 +1217,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
>   	job->owner = p->filp;
>   	p->fence = dma_fence_get(&job->base.s_fence->finished);
>   
> -	r = amdgpu_ctx_add_fence(p->ctx, entity, p->fence, &seq);
> -	if (r) {
> -		dma_fence_put(p->fence);
> -		dma_fence_put(&job->base.s_fence->finished);
> -		amdgpu_job_free(job);
> -		amdgpu_mn_unlock(p->mn);
> -		return r;
> -	}
> -
> +	amdgpu_ctx_add_fence(p->ctx, entity, p->fence, &seq);
>   	amdgpu_cs_post_dependencies(p);
>   
>   	if ((job->preamble_status & AMDGPU_PREAMBLE_IB_PRESENT) &&
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> index 987b7f256463..f9b54236102d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> @@ -434,9 +434,9 @@ int amdgpu_ctx_put(struct amdgpu_ctx *ctx)
>   	return 0;
>   }
>   
> -int amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
> -			 struct drm_sched_entity *entity,
> -			 struct dma_fence *fence, uint64_t* handle)
> +void amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
> +			  struct drm_sched_entity *entity,
> +			  struct dma_fence *fence, uint64_t* handle)
>   {
>   	struct amdgpu_ctx_entity *centity = to_amdgpu_ctx_entity(entity);
>   	uint64_t seq = centity->sequence;
> @@ -458,8 +458,6 @@ int amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
>   	dma_fence_put(other);
>   	if (handle)
>   		*handle = seq;
> -
> -	return 0;
>   }
>   
>   struct dma_fence *amdgpu_ctx_get_fence(struct amdgpu_ctx *ctx,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
> index d67c1d285a4f..b3b012c0a7da 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
> @@ -65,9 +65,9 @@ int amdgpu_ctx_put(struct amdgpu_ctx *ctx);
>   
>   int amdgpu_ctx_get_entity(struct amdgpu_ctx *ctx, u32 hw_ip, u32 instance,
>   			  u32 ring, struct drm_sched_entity **entity);
> -int amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
> -			 struct drm_sched_entity *entity,
> -			 struct dma_fence *fence, uint64_t *seq);
> +void amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
> +			  struct drm_sched_entity *entity,
> +			  struct dma_fence *fence, uint64_t *seq);
>   struct dma_fence *amdgpu_ctx_get_fence(struct amdgpu_ctx *ctx,
>   				       struct drm_sched_entity *entity,
>   				       uint64_t seq);

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

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

* Re: [PATCH 2/2] drm/amdgpu: fix holding mn_lock while allocating memory
       [not found]     ` <20180824125016.1315-2-christian.koenig-5C7GfCeVMHo@public.gmane.org>
@ 2018-08-24 13:35       ` Chunming Zhou
  0 siblings, 0 replies; 5+ messages in thread
From: Chunming Zhou @ 2018-08-24 13:35 UTC (permalink / raw)
  To: Christian König, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: mhocko-DgEjT+Ai2ygdnm+yROfE0A



在 2018/8/24 20:50, Christian König 写道:
> We can't hold the mn_lock while allocating memory.
if you could add some comments from what you discussed with Michal to 
explain why, it would be better.
With that fixed, Acked-by: Chunming Zhou <david1.zhou@amd.com>

David
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 30 +++++++++++++++-----------
>   1 file changed, 18 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index 80ad23061f1c..34d18d9dfcbd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -1194,26 +1194,23 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
>   
>   	int r;
>   
> +	job = p->job;
> +	p->job = NULL;
> +
> +	r = drm_sched_job_init(&job->base, entity, p->filp);
> +	if (r)
> +		goto error_unlock;
> +
>   	amdgpu_mn_lock(p->mn);
>   	amdgpu_bo_list_for_each_userptr_entry(e, p->bo_list) {
>   		struct amdgpu_bo *bo = e->robj;
>   
>   		if (amdgpu_ttm_tt_userptr_needs_pages(bo->tbo.ttm)) {
> -			amdgpu_mn_unlock(p->mn);
> -			return -ERESTARTSYS;
> +			r = -ERESTARTSYS;
> +			goto error_abort;
>   		}
>   	}
>   
> -	job = p->job;
> -	p->job = NULL;
> -
> -	r = drm_sched_job_init(&job->base, entity, p->filp);
> -	if (r) {
> -		amdgpu_job_free(job);
> -		amdgpu_mn_unlock(p->mn);
> -		return r;
> -	}
> -
>   	job->owner = p->filp;
>   	p->fence = dma_fence_get(&job->base.s_fence->finished);
>   
> @@ -1243,6 +1240,15 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
>   	amdgpu_mn_unlock(p->mn);
>   
>   	return 0;
> +
> +error_abort:
> +	dma_fence_put(&job->base.s_fence->finished);
> +	job->base.s_fence = NULL;
> +
> +error_unlock:
> +	amdgpu_job_free(job);
> +	amdgpu_mn_unlock(p->mn);
> +	return r;
>   }
>   
>   int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)

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

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

* Re: [PATCH 1/2] drm/amdgpu: amdgpu_ctx_add_fence can't fail
       [not found] ` <20180824125016.1315-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
  2018-08-24 12:50   ` [PATCH 2/2] drm/amdgpu: fix holding mn_lock while allocating memory Christian König
  2018-08-24 13:24   ` [PATCH 1/2] drm/amdgpu: amdgpu_ctx_add_fence can't fail Chunming Zhou
@ 2018-08-27  2:09   ` Zhang, Jerry (Junwei)
  2 siblings, 0 replies; 5+ messages in thread
From: Zhang, Jerry (Junwei) @ 2018-08-27  2:09 UTC (permalink / raw)
  To: Christian König, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: mhocko-DgEjT+Ai2ygdnm+yROfE0A

On 08/24/2018 08:50 PM, Christian König wrote:
> No more waiting for a fence done here.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c  | 10 +---------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c |  8 +++-----
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h |  6 +++---
>   3 files changed, 7 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index fd3902983195..80ad23061f1c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -1217,15 +1217,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
>   	job->owner = p->filp;
>   	p->fence = dma_fence_get(&job->base.s_fence->finished);
>
> -	r = amdgpu_ctx_add_fence(p->ctx, entity, p->fence, &seq);
> -	if (r) {
> -		dma_fence_put(p->fence);
> -		dma_fence_put(&job->base.s_fence->finished);
> -		amdgpu_job_free(job);
> -		amdgpu_mn_unlock(p->mn);
> -		return r;
> -	}
> -
> +	amdgpu_ctx_add_fence(p->ctx, entity, p->fence, &seq);
>   	amdgpu_cs_post_dependencies(p);
>
>   	if ((job->preamble_status & AMDGPU_PREAMBLE_IB_PRESENT) &&
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> index 987b7f256463..f9b54236102d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> @@ -434,9 +434,9 @@ int amdgpu_ctx_put(struct amdgpu_ctx *ctx)
>   	return 0;
>   }
>
> -int amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
> -			 struct drm_sched_entity *entity,
> -			 struct dma_fence *fence, uint64_t* handle)
> +void amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
> +			  struct drm_sched_entity *entity,
> +			  struct dma_fence *fence, uint64_t* handle)
>   {
>   	struct amdgpu_ctx_entity *centity = to_amdgpu_ctx_entity(entity);
>   	uint64_t seq = centity->sequence;
> @@ -458,8 +458,6 @@ int amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
>   	dma_fence_put(other);
>   	if (handle)
>   		*handle = seq;
> -
> -	return 0;
>   }
>
>   struct dma_fence *amdgpu_ctx_get_fence(struct amdgpu_ctx *ctx,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
> index d67c1d285a4f..b3b012c0a7da 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
> @@ -65,9 +65,9 @@ int amdgpu_ctx_put(struct amdgpu_ctx *ctx);
>
>   int amdgpu_ctx_get_entity(struct amdgpu_ctx *ctx, u32 hw_ip, u32 instance,
>   			  u32 ring, struct drm_sched_entity **entity);
> -int amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
> -			 struct drm_sched_entity *entity,
> -			 struct dma_fence *fence, uint64_t *seq);
> +void amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
> +			  struct drm_sched_entity *entity,
> +			  struct dma_fence *fence, uint64_t *seq);
>   struct dma_fence *amdgpu_ctx_get_fence(struct amdgpu_ctx *ctx,
>   				       struct drm_sched_entity *entity,
>   				       uint64_t seq);
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

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

end of thread, other threads:[~2018-08-27  2:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-08-24 12:50 [PATCH 1/2] drm/amdgpu: amdgpu_ctx_add_fence can't fail Christian König
     [not found] ` <20180824125016.1315-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-08-24 12:50   ` [PATCH 2/2] drm/amdgpu: fix holding mn_lock while allocating memory Christian König
     [not found]     ` <20180824125016.1315-2-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-08-24 13:35       ` Chunming Zhou
2018-08-24 13:24   ` [PATCH 1/2] drm/amdgpu: amdgpu_ctx_add_fence can't fail Chunming Zhou
2018-08-27  2:09   ` Zhang, Jerry (Junwei)

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.