why we unreserve MQD of KIQ ?

Alex Deucher alexdeucher at gmail.com
Mon Nov 25 20:34:27 UTC 2019


On Mon, Nov 25, 2019 at 4:05 AM Liu, Monk <Monk.Liu at amd.com> wrote:

> commit a9a8a788e5e946a9835a1365256fc4ce9e96ba2c
>
> Author: Rex Zhu <Rex.Zhu at amd.com>
>
> Date:   Wed Aug 22 18:54:45 2018 +0800
>
>
>
>     drm/amdgpu: Change kiq ring initialize sequence on gfx9
>
>
>
>     1. initialize kiq before initialize gfx ring.
>
>     2. set kiq ring ready immediately when kiq initialize
>
>        successfully.
>
>     3. split function gfx_v9_0_kiq_resume into two functions.
>
>          gfx_v9_0_kiq_resume is for kiq initialize.
>
>          gfx_v9_0_kcq_resume is for kcq initialize.
>
>
>
>     Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
>
>     Signed-off-by: Rex Zhu <Rex.Zhu at amd.com>
>
>     Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
>
>
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>
> index 21e66f8..3594704a 100644
>
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>
> @@ -2684,7 +2684,6 @@ static int gfx_v9_0_kiq_kcq_enable(struct
> amdgpu_device *adev)
>
>                 queue_mask |= (1ull << i);
>
>         }
>
>
>
> -       kiq_ring->ready = true;
>
>         r = amdgpu_ring_alloc(kiq_ring, (7 * adev->gfx.num_compute_rings)
> + 8);
>
>         if (r) {
>
>                 DRM_ERROR("Failed to lock KIQ (%d).\n", r);
>
> @@ -3091,26 +3090,33 @@ static int gfx_v9_0_kcq_init_queue(struct
> amdgpu_ring *ring)
>
>
>
> static int gfx_v9_0_kiq_resume(struct amdgpu_device *adev)
>
> {
>
> -       struct amdgpu_ring *ring = NULL;
>
> -       int r = 0, i;
>
> -
>
> -       gfx_v9_0_cp_compute_enable(adev, true);
>
> +       struct amdgpu_ring *ring;
>
> +       int r;
>
>
>
>         ring = &adev->gfx.kiq.ring;
>
>
>
>         r = amdgpu_bo_reserve(ring->mqd_obj, false);
>
>         if (unlikely(r != 0))
>
> -               goto done;
>
> +               return r;
>
>
>
>         r = amdgpu_bo_kmap(ring->mqd_obj, (void **)&ring->mqd_ptr);
>
> -       if (!r) {
>
> -               r = gfx_v9_0_kiq_init_queue(ring);
>
> -               amdgpu_bo_kunmap(ring->mqd_obj);
>
> -               ring->mqd_ptr = NULL;
>
> -       }
>
> +       if (unlikely(r != 0))
>
> +               return r;
>
> +
>
> +       gfx_v9_0_kiq_init_queue(ring);
>
> +       amdgpu_bo_kunmap(ring->mqd_obj);  //not invoked before change
>
> +       ring->mqd_ptr = NULL;                             //not invoked
> before change
>
>         amdgpu_bo_unreserve(ring->mqd_obj); //not invoked before change
>
> -       if (r)
>
> -               goto done;
>
> +       ring->ready = true;
>
> +       return 0;
>
> +}
>
> +
>
> +static int gfx_v9_0_kcq_resume(struct amdgpu_device *adev)
>
> +{
>
>
>
> Hi guys
>
>
>
> I found in last year, Rex submitted a change which introduced additional
> “amdgpu_bo_kunmap() and amdgpu_bo_unreserve()”
>
> During the kiq_resume() routine,
>
>
>
> I’m wondering why we need this change and I’m also suspecting it has
> potential regression:
>
> See that the KIQ’s mqd  object is unreserved, so it now available in LRU
> which means TTM can evict it by will,
>
>
>
> But the MQD of KIQ is supposed to be pinned otherwise incorrect memory
> access would introduced by a world switch
>
> Since MEC always consider KIQ’ MQD is pinned
>
>
>
> @Koenig, Christian <Christian.Koenig at amd.com> you know about that
> change’s background ?
>
>
>

I think the unreserve here is just to match the reserve at the top of this
function for the kmapping.  It should still be pinned because we call
amdgpu_bo_create_kernel() to allocate it.

Alex


> _____________________________________
>
> Monk Liu|GPU Virtualization Team |AMD
>
> [image: sig-cloud-gpu]
>
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20191125/3c7b0ea4/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 12243 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20191125/3c7b0ea4/attachment-0001.png>


More information about the amd-gfx mailing list