All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] drm/amdgpu: fix switch-case indentation
@ 2020-03-13 14:34 Nirmoy Das
  2020-03-13 14:34 ` [PATCH v3 2/3] drm/sched: implement and export drm_sched_pick_best Nirmoy Das
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Nirmoy Das @ 2020-03-13 14:34 UTC (permalink / raw)
  To: amd-gfx
  Cc: Boyuan.Zhang, nirmoy.das, alexander.deucher, James.Zhu, Leo.Liu,
	christian.koenig

Fix switch-case indentation in amdgpu_ctx_init_entity()

Signed-off-by: Nirmoy Das <nirmoy.das@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 82 ++++++++++++-------------
 1 file changed, 41 insertions(+), 41 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index fa575bdc03c8..74c795a5e187 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -91,47 +91,47 @@ static int amdgpu_ctx_init_entity(struct amdgpu_ctx *ctx, const u32 hw_ip, const
 	priority = (ctx->override_priority == DRM_SCHED_PRIORITY_UNSET) ?
 				ctx->init_priority : ctx->override_priority;
 	switch (hw_ip) {
-		case AMDGPU_HW_IP_GFX:
-			sched = &adev->gfx.gfx_ring[0].sched;
-			scheds = &sched;
-			num_scheds = 1;
-			break;
-		case AMDGPU_HW_IP_COMPUTE:
-			hw_prio = amdgpu_ctx_sched_prio_to_compute_prio(priority);
-			scheds = adev->gfx.compute_prio_sched[hw_prio];
-			num_scheds = adev->gfx.num_compute_sched[hw_prio];
-			break;
-		case AMDGPU_HW_IP_DMA:
-			scheds = adev->sdma.sdma_sched;
-			num_scheds = adev->sdma.num_sdma_sched;
-			break;
-		case AMDGPU_HW_IP_UVD:
-			sched = &adev->uvd.inst[0].ring.sched;
-			scheds = &sched;
-			num_scheds = 1;
-			break;
-		case AMDGPU_HW_IP_VCE:
-			sched = &adev->vce.ring[0].sched;
-			scheds = &sched;
-			num_scheds = 1;
-			break;
-		case AMDGPU_HW_IP_UVD_ENC:
-			sched = &adev->uvd.inst[0].ring_enc[0].sched;
-			scheds = &sched;
-			num_scheds = 1;
-			break;
-		case AMDGPU_HW_IP_VCN_DEC:
-			scheds = adev->vcn.vcn_dec_sched;
-			num_scheds =  adev->vcn.num_vcn_dec_sched;
-			break;
-		case AMDGPU_HW_IP_VCN_ENC:
-			scheds = adev->vcn.vcn_enc_sched;
-			num_scheds =  adev->vcn.num_vcn_enc_sched;
-			break;
-		case AMDGPU_HW_IP_VCN_JPEG:
-			scheds = adev->jpeg.jpeg_sched;
-			num_scheds =  adev->jpeg.num_jpeg_sched;
-			break;
+	case AMDGPU_HW_IP_GFX:
+		sched = &adev->gfx.gfx_ring[0].sched;
+		scheds = &sched;
+		num_scheds = 1;
+		break;
+	case AMDGPU_HW_IP_COMPUTE:
+		hw_prio = amdgpu_ctx_sched_prio_to_compute_prio(priority);
+		scheds = adev->gfx.compute_prio_sched[hw_prio];
+		num_scheds = adev->gfx.num_compute_sched[hw_prio];
+		break;
+	case AMDGPU_HW_IP_DMA:
+		scheds = adev->sdma.sdma_sched;
+		num_scheds = adev->sdma.num_sdma_sched;
+		break;
+	case AMDGPU_HW_IP_UVD:
+		sched = &adev->uvd.inst[0].ring.sched;
+		scheds = &sched;
+		num_scheds = 1;
+		break;
+	case AMDGPU_HW_IP_VCE:
+		sched = &adev->vce.ring[0].sched;
+		scheds = &sched;
+		num_scheds = 1;
+		break;
+	case AMDGPU_HW_IP_UVD_ENC:
+		sched = &adev->uvd.inst[0].ring_enc[0].sched;
+		scheds = &sched;
+		num_scheds = 1;
+		break;
+	case AMDGPU_HW_IP_VCN_DEC:
+		scheds = adev->vcn.vcn_dec_sched;
+		num_scheds =  adev->vcn.num_vcn_dec_sched;
+		break;
+	case AMDGPU_HW_IP_VCN_ENC:
+		scheds = adev->vcn.vcn_enc_sched;
+		num_scheds =  adev->vcn.num_vcn_enc_sched;
+		break;
+	case AMDGPU_HW_IP_VCN_JPEG:
+		scheds = adev->jpeg.jpeg_sched;
+		num_scheds =  adev->jpeg.num_jpeg_sched;
+		break;
 	}
 
 	r = drm_sched_entity_init(&entity->entity, priority, scheds, num_scheds,
-- 
2.25.0

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

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

* [PATCH v3 2/3] drm/sched: implement and export drm_sched_pick_best
  2020-03-13 14:34 [PATCH 1/3] drm/amdgpu: fix switch-case indentation Nirmoy Das
@ 2020-03-13 14:34 ` Nirmoy Das
  2020-03-13 14:34 ` [PATCH v2 3/3] drm/amdgpu: disable gpu_sched load balancer for vcn jobs Nirmoy Das
  2020-03-13 18:12 ` [PATCH 1/3] drm/amdgpu: fix switch-case indentation Christian König
  2 siblings, 0 replies; 4+ messages in thread
From: Nirmoy Das @ 2020-03-13 14:34 UTC (permalink / raw)
  To: amd-gfx
  Cc: Boyuan.Zhang, nirmoy.das, alexander.deucher, James.Zhu, Leo.Liu,
	christian.koenig

Remove drm_sched_entity_get_free_sched() and use the logic of picking
the least loaded drm scheduler from a drm scheduler list to implement
drm_sched_pick_best(). This patch also exports drm_sched_pick_best() so
that it can be utilized by other drm drivers.

Signed-off-by: Nirmoy Das <nirmoy.das@amd.com>
---
 drivers/gpu/drm/scheduler/sched_entity.c | 36 ++----------------------
 drivers/gpu/drm/scheduler/sched_main.c   | 36 ++++++++++++++++++++++++
 include/drm/gpu_scheduler.h              |  3 ++
 3 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
index d631521a9679..c803e14eed91 100644
--- a/drivers/gpu/drm/scheduler/sched_entity.c
+++ b/drivers/gpu/drm/scheduler/sched_entity.c
@@ -137,38 +137,6 @@ bool drm_sched_entity_is_ready(struct drm_sched_entity *entity)
 	return true;
 }

-/**
- * drm_sched_entity_get_free_sched - Get the rq from rq_list with least load
- *
- * @entity: scheduler entity
- *
- * Return the pointer to the rq with least load.
- */
-static struct drm_sched_rq *
-drm_sched_entity_get_free_sched(struct drm_sched_entity *entity)
-{
-	struct drm_sched_rq *rq = NULL;
-	unsigned int min_jobs = UINT_MAX, num_jobs;
-	int i;
-
-	for (i = 0; i < entity->num_sched_list; ++i) {
-		struct drm_gpu_scheduler *sched = entity->sched_list[i];
-
-		if (!entity->sched_list[i]->ready) {
-			DRM_WARN("sched%s is not ready, skipping", sched->name);
-			continue;
-		}
-
-		num_jobs = atomic_read(&sched->num_jobs);
-		if (num_jobs < min_jobs) {
-			min_jobs = num_jobs;
-			rq = &entity->sched_list[i]->sched_rq[entity->priority];
-		}
-	}
-
-	return rq;
-}
-
 /**
  * drm_sched_entity_flush - Flush a context entity
  *
@@ -479,6 +447,7 @@ struct drm_sched_job *drm_sched_entity_pop_job(struct drm_sched_entity *entity)
 void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
 {
 	struct dma_fence *fence;
+	struct drm_gpu_scheduler *sched;
 	struct drm_sched_rq *rq;

 	if (spsc_queue_count(&entity->job_queue) || entity->num_sched_list <= 1)
@@ -489,7 +458,8 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
 		return;

 	spin_lock(&entity->rq_lock);
-	rq = drm_sched_entity_get_free_sched(entity);
+	sched = drm_sched_pick_best(entity->sched_list, entity->num_sched_list);
+	rq = sched ? &sched->sched_rq[entity->priority] : NULL;
 	if (rq != entity->rq) {
 		drm_sched_rq_remove_entity(entity->rq, entity);
 		entity->rq = rq;
diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
index 3fad5876a13f..1dcafc8d14fc 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -705,6 +705,42 @@ drm_sched_get_cleanup_job(struct drm_gpu_scheduler *sched)
 	return job;
 }

+/**
+ * drm_sched_pick_best - Get a drm sched from a sched_list with the least load
+ * @sched_list: list of drm_gpu_schedulers
+ * @num_sched_list: number of drm_gpu_schedulers in the sched_list
+ *
+ * Returns pointer of the sched with the least load or NULL if none of the
+ * drm_gpu_schedulers are ready
+ */
+struct drm_gpu_scheduler *
+drm_sched_pick_best(struct drm_gpu_scheduler **sched_list,
+		     unsigned int num_sched_list)
+{
+	struct drm_gpu_scheduler *sched, *picked_sched = NULL;
+	int i;
+	unsigned int min_jobs = UINT_MAX, num_jobs;
+
+	for (i = 0; i < num_sched_list; ++i) {
+		sched = sched_list[i];
+
+		if (!sched->ready) {
+			DRM_WARN("scheduler %s is not ready, skipping",
+				 sched->name);
+			continue;
+		}
+
+		num_jobs = atomic_read(&sched->num_jobs);
+		if (num_jobs < min_jobs) {
+			min_jobs = num_jobs;
+			picked_sched = sched;
+		}
+	}
+
+	return picked_sched;
+}
+EXPORT_SYMBOL(drm_sched_pick_best);
+
 /**
  * drm_sched_blocked - check if the scheduler is blocked
  *
diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
index ae39eacee250..26b04ff62676 100644
--- a/include/drm/gpu_scheduler.h
+++ b/include/drm/gpu_scheduler.h
@@ -341,5 +341,8 @@ void drm_sched_fence_finished(struct drm_sched_fence *fence);
 unsigned long drm_sched_suspend_timeout(struct drm_gpu_scheduler *sched);
 void drm_sched_resume_timeout(struct drm_gpu_scheduler *sched,
 		                unsigned long remaining);
+struct drm_gpu_scheduler *
+drm_sched_pick_best(struct drm_gpu_scheduler **sched_list,
+		     unsigned int num_sched_list);

 #endif
--
2.25.0

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

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

* [PATCH v2 3/3] drm/amdgpu: disable gpu_sched load balancer for vcn jobs
  2020-03-13 14:34 [PATCH 1/3] drm/amdgpu: fix switch-case indentation Nirmoy Das
  2020-03-13 14:34 ` [PATCH v3 2/3] drm/sched: implement and export drm_sched_pick_best Nirmoy Das
@ 2020-03-13 14:34 ` Nirmoy Das
  2020-03-13 18:12 ` [PATCH 1/3] drm/amdgpu: fix switch-case indentation Christian König
  2 siblings, 0 replies; 4+ messages in thread
From: Nirmoy Das @ 2020-03-13 14:34 UTC (permalink / raw)
  To: amd-gfx
  Cc: Boyuan.Zhang, nirmoy.das, alexander.deucher, James.Zhu, Leo.Liu,
	christian.koenig

VCN HW doesn't support dynamic load balance on multiple instances
for a context. This patch initializes VNC entities with only one
drm_gpu_scheduler picked by drm_sched_pick_best(). Picking a
drm_gpu_scheduler using drm_sched_pick_best() ensures that we
do load balance among multiple contexts but not among multiple
jobs in a context.

Signed-off-by: Nirmoy Das <nirmoy.das@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index 74c795a5e187..6ed36a2c5f73 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -121,12 +121,16 @@ static int amdgpu_ctx_init_entity(struct amdgpu_ctx *ctx, const u32 hw_ip, const
 		num_scheds = 1;
 		break;
 	case AMDGPU_HW_IP_VCN_DEC:
-		scheds = adev->vcn.vcn_dec_sched;
-		num_scheds =  adev->vcn.num_vcn_dec_sched;
+		sched = drm_sched_pick_best(adev->vcn.vcn_dec_sched,
+					    adev->vcn.num_vcn_dec_sched);
+		scheds = &sched;
+		num_scheds = 1;
 		break;
 	case AMDGPU_HW_IP_VCN_ENC:
-		scheds = adev->vcn.vcn_enc_sched;
-		num_scheds =  adev->vcn.num_vcn_enc_sched;
+		sched = drm_sched_pick_best(adev->vcn.vcn_enc_sched,
+					    adev->vcn.num_vcn_enc_sched);
+		scheds = &sched;
+		num_scheds = 1;
 		break;
 	case AMDGPU_HW_IP_VCN_JPEG:
 		scheds = adev->jpeg.jpeg_sched;
--
2.25.0

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

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

* Re: [PATCH 1/3] drm/amdgpu: fix switch-case indentation
  2020-03-13 14:34 [PATCH 1/3] drm/amdgpu: fix switch-case indentation Nirmoy Das
  2020-03-13 14:34 ` [PATCH v3 2/3] drm/sched: implement and export drm_sched_pick_best Nirmoy Das
  2020-03-13 14:34 ` [PATCH v2 3/3] drm/amdgpu: disable gpu_sched load balancer for vcn jobs Nirmoy Das
@ 2020-03-13 18:12 ` Christian König
  2 siblings, 0 replies; 4+ messages in thread
From: Christian König @ 2020-03-13 18:12 UTC (permalink / raw)
  To: Nirmoy Das, amd-gfx
  Cc: alexander.deucher, Boyuan.Zhang, nirmoy.das, Leo.Liu, James.Zhu

Am 13.03.20 um 15:34 schrieb Nirmoy Das:
> Fix switch-case indentation in amdgpu_ctx_init_entity()
>
> Signed-off-by: Nirmoy Das <nirmoy.das@amd.com>

Reviewed-by: Christian König <christian.koenig@amd.com> for the series.

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 82 ++++++++++++-------------
>   1 file changed, 41 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> index fa575bdc03c8..74c795a5e187 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> @@ -91,47 +91,47 @@ static int amdgpu_ctx_init_entity(struct amdgpu_ctx *ctx, const u32 hw_ip, const
>   	priority = (ctx->override_priority == DRM_SCHED_PRIORITY_UNSET) ?
>   				ctx->init_priority : ctx->override_priority;
>   	switch (hw_ip) {
> -		case AMDGPU_HW_IP_GFX:
> -			sched = &adev->gfx.gfx_ring[0].sched;
> -			scheds = &sched;
> -			num_scheds = 1;
> -			break;
> -		case AMDGPU_HW_IP_COMPUTE:
> -			hw_prio = amdgpu_ctx_sched_prio_to_compute_prio(priority);
> -			scheds = adev->gfx.compute_prio_sched[hw_prio];
> -			num_scheds = adev->gfx.num_compute_sched[hw_prio];
> -			break;
> -		case AMDGPU_HW_IP_DMA:
> -			scheds = adev->sdma.sdma_sched;
> -			num_scheds = adev->sdma.num_sdma_sched;
> -			break;
> -		case AMDGPU_HW_IP_UVD:
> -			sched = &adev->uvd.inst[0].ring.sched;
> -			scheds = &sched;
> -			num_scheds = 1;
> -			break;
> -		case AMDGPU_HW_IP_VCE:
> -			sched = &adev->vce.ring[0].sched;
> -			scheds = &sched;
> -			num_scheds = 1;
> -			break;
> -		case AMDGPU_HW_IP_UVD_ENC:
> -			sched = &adev->uvd.inst[0].ring_enc[0].sched;
> -			scheds = &sched;
> -			num_scheds = 1;
> -			break;
> -		case AMDGPU_HW_IP_VCN_DEC:
> -			scheds = adev->vcn.vcn_dec_sched;
> -			num_scheds =  adev->vcn.num_vcn_dec_sched;
> -			break;
> -		case AMDGPU_HW_IP_VCN_ENC:
> -			scheds = adev->vcn.vcn_enc_sched;
> -			num_scheds =  adev->vcn.num_vcn_enc_sched;
> -			break;
> -		case AMDGPU_HW_IP_VCN_JPEG:
> -			scheds = adev->jpeg.jpeg_sched;
> -			num_scheds =  adev->jpeg.num_jpeg_sched;
> -			break;
> +	case AMDGPU_HW_IP_GFX:
> +		sched = &adev->gfx.gfx_ring[0].sched;
> +		scheds = &sched;
> +		num_scheds = 1;
> +		break;
> +	case AMDGPU_HW_IP_COMPUTE:
> +		hw_prio = amdgpu_ctx_sched_prio_to_compute_prio(priority);
> +		scheds = adev->gfx.compute_prio_sched[hw_prio];
> +		num_scheds = adev->gfx.num_compute_sched[hw_prio];
> +		break;
> +	case AMDGPU_HW_IP_DMA:
> +		scheds = adev->sdma.sdma_sched;
> +		num_scheds = adev->sdma.num_sdma_sched;
> +		break;
> +	case AMDGPU_HW_IP_UVD:
> +		sched = &adev->uvd.inst[0].ring.sched;
> +		scheds = &sched;
> +		num_scheds = 1;
> +		break;
> +	case AMDGPU_HW_IP_VCE:
> +		sched = &adev->vce.ring[0].sched;
> +		scheds = &sched;
> +		num_scheds = 1;
> +		break;
> +	case AMDGPU_HW_IP_UVD_ENC:
> +		sched = &adev->uvd.inst[0].ring_enc[0].sched;
> +		scheds = &sched;
> +		num_scheds = 1;
> +		break;
> +	case AMDGPU_HW_IP_VCN_DEC:
> +		scheds = adev->vcn.vcn_dec_sched;
> +		num_scheds =  adev->vcn.num_vcn_dec_sched;
> +		break;
> +	case AMDGPU_HW_IP_VCN_ENC:
> +		scheds = adev->vcn.vcn_enc_sched;
> +		num_scheds =  adev->vcn.num_vcn_enc_sched;
> +		break;
> +	case AMDGPU_HW_IP_VCN_JPEG:
> +		scheds = adev->jpeg.jpeg_sched;
> +		num_scheds =  adev->jpeg.num_jpeg_sched;
> +		break;
>   	}
>   
>   	r = drm_sched_entity_init(&entity->entity, priority, scheds, num_scheds,

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

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

end of thread, other threads:[~2020-03-13 18:13 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-13 14:34 [PATCH 1/3] drm/amdgpu: fix switch-case indentation Nirmoy Das
2020-03-13 14:34 ` [PATCH v3 2/3] drm/sched: implement and export drm_sched_pick_best Nirmoy Das
2020-03-13 14:34 ` [PATCH v2 3/3] drm/amdgpu: disable gpu_sched load balancer for vcn jobs Nirmoy Das
2020-03-13 18:12 ` [PATCH 1/3] drm/amdgpu: fix switch-case indentation 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.