<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:DengXian;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:DengXian;
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">commit a9a8a788e5e946a9835a1365256fc4ce9e96ba2c<o:p></o:p></p>
<p class="MsoNormal">Author: Rex Zhu <Rex.Zhu@amd.com><o:p></o:p></p>
<p class="MsoNormal">Date: Wed Aug 22 18:54:45 2018 +0800<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> drm/amdgpu: Change kiq ring initialize sequence on gfx9<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> 1. initialize kiq before initialize gfx ring.<o:p></o:p></p>
<p class="MsoNormal"> 2. set kiq ring ready immediately when kiq initialize<o:p></o:p></p>
<p class="MsoNormal"> successfully.<o:p></o:p></p>
<p class="MsoNormal"> 3. split function gfx_v9_0_kiq_resume into two functions.<o:p></o:p></p>
<p class="MsoNormal"> gfx_v9_0_kiq_resume is for kiq initialize.<o:p></o:p></p>
<p class="MsoNormal"> gfx_v9_0_kcq_resume is for kcq initialize.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> Reviewed-by: Alex Deucher <alexander.deucher@amd.com><o:p></o:p></p>
<p class="MsoNormal"> Signed-off-by: Rex Zhu <Rex.Zhu@amd.com><o:p></o:p></p>
<p class="MsoNormal"> Signed-off-by: Alex Deucher <alexander.deucher@amd.com><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></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<o:p></o:p></p>
<p class="MsoNormal">index 21e66f8..3594704a 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c<o:p></o:p></p>
<p class="MsoNormal">@@ -2684,7 +2684,6 @@ static int gfx_v9_0_kiq_kcq_enable(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal"> queue_mask |= (1ull << i);<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">- kiq_ring->ready = true;<o:p></o:p></p>
<p class="MsoNormal"> r = amdgpu_ring_alloc(kiq_ring, (7 * adev->gfx.num_compute_rings) + 8);<o:p></o:p></p>
<p class="MsoNormal"> if (r) {<o:p></o:p></p>
<p class="MsoNormal"> DRM_ERROR("Failed to lock KIQ (%d).\n", r);<o:p></o:p></p>
<p class="MsoNormal">@@ -3091,26 +3090,33 @@ static int gfx_v9_0_kcq_init_queue(struct amdgpu_ring *ring)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">static int gfx_v9_0_kiq_resume(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">- struct amdgpu_ring *ring = NULL;<o:p></o:p></p>
<p class="MsoNormal">- int r = 0, i;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">- gfx_v9_0_cp_compute_enable(adev, true);<o:p></o:p></p>
<p class="MsoNormal">+ struct amdgpu_ring *ring;<o:p></o:p></p>
<p class="MsoNormal">+ int r;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ring = &adev->gfx.kiq.ring;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> r = amdgpu_bo_reserve(ring->mqd_obj, false);<o:p></o:p></p>
<p class="MsoNormal"> if (unlikely(r != 0))<o:p></o:p></p>
<p class="MsoNormal">- goto done;<o:p></o:p></p>
<p class="MsoNormal">+ return r;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> r = amdgpu_bo_kmap(ring->mqd_obj, (void **)&ring->mqd_ptr);<o:p></o:p></p>
<p class="MsoNormal">- if (!r) {<o:p></o:p></p>
<p class="MsoNormal">- r = gfx_v9_0_kiq_init_queue(ring);<o:p></o:p></p>
<p class="MsoNormal">- amdgpu_bo_kunmap(ring->mqd_obj);<o:p></o:p></p>
<p class="MsoNormal">- ring->mqd_ptr = NULL;<o:p></o:p></p>
<p class="MsoNormal">- }<o:p></o:p></p>
<p class="MsoNormal">+ if (unlikely(r != 0))<o:p></o:p></p>
<p class="MsoNormal">+ return r;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+ gfx_v9_0_kiq_init_queue(ring);<o:p></o:p></p>
<p class="MsoNormal">+ amdgpu_bo_kunmap(ring->mqd_obj); //not invoked before change<o:p></o:p></p>
<p class="MsoNormal">+ ring->mqd_ptr = NULL; //not invoked before change<o:p></o:p></p>
<p class="MsoNormal"> amdgpu_bo_unreserve(ring->mqd_obj); //not invoked before change<o:p></o:p></p>
<p class="MsoNormal">- if (r)<o:p></o:p></p>
<p class="MsoNormal">- goto done;<o:p></o:p></p>
<p class="MsoNormal">+ ring->ready = true;<o:p></o:p></p>
<p class="MsoNormal">+ return 0;<o:p></o:p></p>
<p class="MsoNormal">+}<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+static int gfx_v9_0_kcq_resume(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">+{<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hi guys<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I found in last year, Rex submitted a change which introduced additional “amdgpu_bo_kunmap() and amdgpu_bo_unreserve()”
<o:p></o:p></p>
<p class="MsoNormal">During the kiq_resume() routine, <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m wondering why we need this change and I’m also suspecting it has potential regression:<o:p></o:p></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,
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">But the MQD of KIQ is supposed to be pinned otherwise incorrect memory access would introduced by a world switch
<o:p></o:p></p>
<p class="MsoNormal">Since MEC always consider KIQ’ MQD is pinned <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a id="OWAAM0FFC6211F4614F8887B50B3503FB00B8" href="mailto:Christian.Koenig@amd.com"><span style="font-family:"Calibri",sans-serif;text-decoration:none">@Koenig, Christian</span></a> you know about that change’s background ?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">_____________________________________<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black;background:white">Monk Liu|GPU Virtualization Team |</span><span style="font-size:12.0pt;color:#C82613;border:none windowtext 1.0pt;padding:0in;background:white">AMD<o:p></o:p></span></p>
<p class="MsoNormal"><img border="0" width="80" height="80" style="width:.8333in;height:.8333in" id="Picture_x0020_1" src="cid:image001.png@01D5A3B1.FC431010" alt="sig-cloud-gpu"><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>