<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 25, 2019 at 4:05 AM Liu, Monk <<a href="mailto:Monk.Liu@amd.com">Monk.Liu@amd.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div class="gmail-m_-8449523087627823094WordSection1">
<p class="MsoNormal">commit a9a8a788e5e946a9835a1365256fc4ce9e96ba2c<u></u><u></u></p>
<p class="MsoNormal">Author: Rex Zhu <<a href="mailto:Rex.Zhu@amd.com" target="_blank">Rex.Zhu@amd.com</a>><u></u><u></u></p>
<p class="MsoNormal">Date:   Wed Aug 22 18:54:45 2018 +0800<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">    drm/amdgpu: Change kiq ring initialize sequence on gfx9<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">    1. initialize kiq before initialize gfx ring.<u></u><u></u></p>
<p class="MsoNormal">    2. set kiq ring ready immediately when kiq initialize<u></u><u></u></p>
<p class="MsoNormal">       successfully.<u></u><u></u></p>
<p class="MsoNormal">    3. split function gfx_v9_0_kiq_resume into two functions.<u></u><u></u></p>
<p class="MsoNormal">         gfx_v9_0_kiq_resume is for kiq initialize.<u></u><u></u></p>
<p class="MsoNormal">         gfx_v9_0_kcq_resume is for kcq initialize.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">    Reviewed-by: Alex Deucher <<a href="mailto:alexander.deucher@amd.com" target="_blank">alexander.deucher@amd.com</a>><u></u><u></u></p>
<p class="MsoNormal">    Signed-off-by: Rex Zhu <<a href="mailto:Rex.Zhu@amd.com" target="_blank">Rex.Zhu@amd.com</a>><u></u><u></u></p>
<p class="MsoNormal">    Signed-off-by: Alex Deucher <<a href="mailto:alexander.deucher@amd.com" target="_blank">alexander.deucher@amd.com</a>><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c<u></u><u></u></p>
<p class="MsoNormal">index 21e66f8..3594704a 100644<u></u><u></u></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c<u></u><u></u></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c<u></u><u></u></p>
<p class="MsoNormal">@@ -2684,7 +2684,6 @@ static int gfx_v9_0_kiq_kcq_enable(struct amdgpu_device *adev)<u></u><u></u></p>
<p class="MsoNormal">                queue_mask |= (1ull << i);<u></u><u></u></p>
<p class="MsoNormal">        }<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">-       kiq_ring->ready = true;<u></u><u></u></p>
<p class="MsoNormal">        r = amdgpu_ring_alloc(kiq_ring, (7 * adev->gfx.num_compute_rings) + 8);<u></u><u></u></p>
<p class="MsoNormal">        if (r) {<u></u><u></u></p>
<p class="MsoNormal">                DRM_ERROR("Failed to lock KIQ (%d).\n", r);<u></u><u></u></p>
<p class="MsoNormal">@@ -3091,26 +3090,33 @@ static int gfx_v9_0_kcq_init_queue(struct amdgpu_ring *ring)<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">static int gfx_v9_0_kiq_resume(struct amdgpu_device *adev)<u></u><u></u></p>
<p class="MsoNormal">{<u></u><u></u></p>
<p class="MsoNormal">-       struct amdgpu_ring *ring = NULL;<u></u><u></u></p>
<p class="MsoNormal">-       int r = 0, i;<u></u><u></u></p>
<p class="MsoNormal">-<u></u><u></u></p>
<p class="MsoNormal">-       gfx_v9_0_cp_compute_enable(adev, true);<u></u><u></u></p>
<p class="MsoNormal">+       struct amdgpu_ring *ring;<u></u><u></u></p>
<p class="MsoNormal">+       int r;<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">        ring = &adev->gfx.kiq.ring;<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">        r = amdgpu_bo_reserve(ring->mqd_obj, false);<u></u><u></u></p>
<p class="MsoNormal">        if (unlikely(r != 0))<u></u><u></u></p>
<p class="MsoNormal">-               goto done;<u></u><u></u></p>
<p class="MsoNormal">+               return r;<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">        r = amdgpu_bo_kmap(ring->mqd_obj, (void **)&ring->mqd_ptr);<u></u><u></u></p>
<p class="MsoNormal">-       if (!r) {<u></u><u></u></p>
<p class="MsoNormal">-               r = gfx_v9_0_kiq_init_queue(ring);<u></u><u></u></p>
<p class="MsoNormal">-               amdgpu_bo_kunmap(ring->mqd_obj);<u></u><u></u></p>
<p class="MsoNormal">-               ring->mqd_ptr = NULL;<u></u><u></u></p>
<p class="MsoNormal">-       }<u></u><u></u></p>
<p class="MsoNormal">+       if (unlikely(r != 0))<u></u><u></u></p>
<p class="MsoNormal">+               return r;<u></u><u></u></p>
<p class="MsoNormal">+<u></u><u></u></p>
<p class="MsoNormal">+       gfx_v9_0_kiq_init_queue(ring);<u></u><u></u></p>
<p class="MsoNormal">+       amdgpu_bo_kunmap(ring->mqd_obj);  //not invoked before change<u></u><u></u></p>
<p class="MsoNormal">+       ring->mqd_ptr = NULL;                             //not invoked before change<u></u><u></u></p>
<p class="MsoNormal">        amdgpu_bo_unreserve(ring->mqd_obj); //not invoked before change<u></u><u></u></p>
<p class="MsoNormal">-       if (r)<u></u><u></u></p>
<p class="MsoNormal">-               goto done;<u></u><u></u></p>
<p class="MsoNormal">+       ring->ready = true;<u></u><u></u></p>
<p class="MsoNormal">+       return 0;<u></u><u></u></p>
<p class="MsoNormal">+}<u></u><u></u></p>
<p class="MsoNormal">+<u></u><u></u></p>
<p class="MsoNormal">+static int gfx_v9_0_kcq_resume(struct amdgpu_device *adev)<u></u><u></u></p>
<p class="MsoNormal">+{<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Hi guys<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I found in last year, Rex submitted a change which introduced additional “amdgpu_bo_kunmap() and amdgpu_bo_unreserve()”
<u></u><u></u></p>
<p class="MsoNormal">During the kiq_resume() routine, <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I’m wondering why we need this change and I’m also suspecting it has potential regression:<u></u><u></u></p>
<p class="MsoNormal">See that the KIQ’s mqd  object is unreserved, so it now available in LRU which means TTM can evict it by will,
<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">But the MQD of KIQ is supposed to be pinned otherwise incorrect memory access would introduced by a world switch
<u></u><u></u></p>
<p class="MsoNormal">Since MEC always consider KIQ’ MQD is pinned <u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><a id="gmail-m_-8449523087627823094OWAAM0FFC6211F4614F8887B50B3503FB00B8" href="mailto:Christian.Koenig@amd.com" target="_blank"><span style="font-family:"Calibri",sans-serif;text-decoration:none">@Koenig, Christian</span></a> you know about that change’s background ?<u></u><u></u></p>
<p class="MsoNormal"><u></u> </p></div></div></blockquote><div><br></div><div>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.</div><div><br></div><div>Alex<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-US"><div class="gmail-m_-8449523087627823094WordSection1"><p class="MsoNormal"><u></u></p>
<p class="MsoNormal">_____________________________________<u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12pt;color:black;background:white none repeat scroll 0% 0%">Monk Liu|GPU Virtualization Team |</span><span style="font-size:12pt;color:rgb(200,38,19);border:1pt none windowtext;padding:0in;background:white none repeat scroll 0% 0%">AMD<u></u><u></u></span></p>
<p class="MsoNormal"><img style="width: 0.8333in; height: 0.8333in;" id="gmail-m_-8449523087627823094Picture_x0020_1" src="cid:16ea44414dc4cff311" alt="sig-cloud-gpu" width="80" height="80" border="0"><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

_______________________________________________<br>
amd-gfx mailing list<br>
<a href="mailto:amd-gfx@lists.freedesktop.org" target="_blank">amd-gfx@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a></blockquote></div></div>