[PATCH] drm/amdgpu:no gpu scheduler for KIQ

Deucher, Alexander Alexander.Deucher at amd.com
Tue Nov 1 15:27:22 UTC 2016


> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Trigger Huang
> Sent: Tuesday, November 01, 2016 3:22 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Yu, Xiangliang; Liu, Monk; Huang, Trigger
> Subject: [PATCH] drm/amdgpu:no gpu scheduler for KIQ
> 
> KIQ is used for interaction between driver and
> CP, and not exposed to outside client, as such it
> doesn't need to be handled by GPU scheduler.
> 
> Signed-off-by: Monk Liu <Monk.Liu at amd.com>
> Signed-off-by: Xiangliang Yu <Xiangliang.Yu at amd.com>
> Signed-off-by: Trigger Huang <trigger.huang at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 4 ++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c  | 6 ++++--
>  2 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> index 77b34ec..c2a2d19 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> @@ -382,6 +382,10 @@ int amdgpu_fence_driver_init_ring(struct
> amdgpu_ring *ring,
>  	if (!ring->fence_drv.fences)
>  		return -ENOMEM;
> 
> +	/* Doesn't need gpu scheduler */
> +	if (!num_hw_submission)
> +		return 0;
> +

Rather than returning early here, I'd suggest wrapping the scheduler setup conditionally.  E.g.,

if (num_hw_submission) {
   /* setup scheduler */
 ....
}

That way if we add anything else to that function, we don't accidently break KIQ.

With that fixed:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

Alex

>  	timeout = msecs_to_jiffies(amdgpu_lockup_timeout);
>  	if (timeout == 0) {
>  		/*
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> index 4c99282..a254c38 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> @@ -168,6 +168,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev,
> struct amdgpu_ring *ring,
>  		     unsigned irq_type)
>  {
>  	int r;
> +	int entry_num = amdgpu_sched_hw_submission;
> 
>  	if (ring->adev == NULL) {
>  		if (adev->num_rings >= AMDGPU_MAX_RINGS)
> @@ -176,8 +177,9 @@ int amdgpu_ring_init(struct amdgpu_device *adev,
> struct amdgpu_ring *ring,
>  		ring->adev = adev;
>  		ring->idx = adev->num_rings++;
>  		adev->rings[ring->idx] = ring;
> -		r = amdgpu_fence_driver_init_ring(ring,
> -			amdgpu_sched_hw_submission);
> +		if (ring->funcs->type == AMDGPU_RING_TYPE_KIQ)
> +			entry_num = 0;
> +		r = amdgpu_fence_driver_init_ring(ring, entry_num);
>  		if (r)
>  			return r;
>  	}
> --
> 2.7.4
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list