<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">Errors should actually be reported by
the caller, not here.<br>
<br>
So we should probably remove that DRM_ERROR here as well.<br>
<br>
Christian.<br>
<br>
Am 17.08.2016 um 16:10 schrieb StDenis, Tom:<br>
</div>
<blockquote
cite="mid:DM5PR12MB1132177CBD3C3B4630BDE2F9F7140@DM5PR12MB1132.namprd12.prod.outlook.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
<div id="divtagdefaultwrapper"
style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Why not be consistent and add a DRM_ERROR on all paths that
include an error? e.g. instead of </p>
<p><br>
</p>
<p>if (r)</p>
<p> goto error_free;</p>
<p><br>
</p>
<p>Throw a DRM_ERROR("") in there.</p>
<p><br>
</p>
<p>Tom</p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font
style="font-size:11pt" color="#000000" face="Calibri,
sans-serif"><b>From:</b> amd-gfx
<a class="moz-txt-link-rfc2396E" href="mailto:amd-gfx-bounces@lists.freedesktop.org"><amd-gfx-bounces@lists.freedesktop.org></a> on behalf
of Christian König <a class="moz-txt-link-rfc2396E" href="mailto:deathsimple@vodafone.de"><deathsimple@vodafone.de></a><br>
<b>Sent:</b> Wednesday, August 17, 2016 10:04<br>
<b>To:</b> Zhou, David(ChunMing);
<a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
<b>Subject:</b> Re: [PATCH 0/8] shadow page table
support V5 ---> shadow bo support</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">Patch #1:<br>
<br>
Could be that we need to add another module parameter to
control this, <br>
but I think for now that should be sufficient.<br>
<br>
Patch is Reviewed-by: Christian König
<a class="moz-txt-link-rfc2396E" href="mailto:christian.koenig@amd.com"><christian.koenig@amd.com></a><br>
<br>
Patch #2:<br>
<br>
> + if (direct_submit) {<br>
> + r = amdgpu_ib_schedule(ring,
job->num_ibs, job->ibs,<br>
> + NULL, NULL,
fence);<br>
> + job->fence = fence_get(*fence);<br>
> + if (r)<br>
> + DRM_ERROR("Error scheduling
IBs (%d)\n", r);<br>
> + amdgpu_job_free(job);<br>
<br>
When there is an error you should return the code as
well.<br>
<br>
> + } else {<br>
> + r = amdgpu_job_submit(job, ring,
&adev->mman.entity,<br>
> +
AMDGPU_FENCE_OWNER_UNDEFINED, fence);<br>
> + if (r)<br>
> + goto error_free;<br>
> + }<br>
> <br>
> return 0;<br>
<br>
Just changing this to to "return r;" should be
sufficient.<br>
<br>
With that fixed the patch is Reviewed-by: Christian
König <br>
<a class="moz-txt-link-rfc2396E" href="mailto:christian.koenig@amd.com"><christian.koenig@amd.com></a> as well.<br>
<br>
Patch #3:<br>
<br>
You mentioned that this isn't used during command
submission but rather <br>
during GPU reset, correct?<br>
<br>
In this case I would advise not to use a member in the
BO structure to <br>
note the backup direction and instead have one function
for back and one <br>
for restoring the content (or note that as a parameter
to the function).<br>
<br>
Otherwise we could run into trouble when the CS wants to
backup <br>
something the GPU reset wants to restore at the same
time.<br>
<br>
Patch #4: Was already reviewed by me.<br>
<br>
Patch #5:<br>
<br>
> + pt = params->shadow ?
vm->page_tables[pt_idx].entry.robj->shadow :<br>
> +
vm->page_tables[pt_idx].entry.robj;<br>
You need to double check here if shadows are actually
allocated or not. <br>
Otherwise we will crash on an APU.<br>
<br>
> + /* double ndw, since need to update shadow pt
bo as well */<br>
> + ndw *= 2;<br>
> +<br>
We don't need to double the IB size, but only the number
of commands in <br>
it (ncmds).<br>
<br>
The difference is when we want to write scattered GART
entries. In this <br>
case I've added the PTEs to the end of the IB.<br>
<br>
Patch #6:<br>
> + spinlock_t
shadow_list_lock;<br>
We might want to use a mutex here instead. Usually I
would agree that a <br>
spin lock is better for a linked list, but during the
restore process in <br>
a GPU reset we probably want to sleep here.<br>
<br>
Alternatively you could splice the list to a local
version on the stack, <br>
grab references to the BOs and then drop the lock during
the restore <br>
process.<br>
<br>
> @@ -541,6 +546,13 @@ void amdgpu_bo_unref(struct
amdgpu_bo **bo)<br>
> if ((*bo) == NULL)<br>
> return;<br>
> <br>
> + /* shadow must be freed before bo itself */<br>
> + if ((!(*bo)->shadow) &&
!list_empty(&(*bo)->shadow_list)) {<br>
> +
spin_lock(&(*bo)->adev->shadow_list_lock);<br>
> +
list_del_init(&(*bo)->shadow_list);<br>
> +
spin_unlock(&(*bo)->adev->shadow_list_lock);<br>
> +<br>
> + }<br>
> tbo = &((*bo)->tbo);<br>
> ttm_bo_unref(&tbo);<br>
> if (tbo == NULL)<br>
That would trigger even when we take a temporary
reference. I suggest to <br>
add a amdgpu_bo_unref_shadow() function instead,
unreferencing both the <br>
shadow and the normal BO.<br>
<br>
This can then be used in the VM code to cleanup the
shadow created.<br>
<br>
Going to skip patch #7 and #8 for now cause our team
call begins in a <br>
moment.<br>
<br>
Regards,<br>
Christian.<br>
<br>
Am 17.08.2016 um 08:05 schrieb Chunming Zhou:<br>
> Since we cannot ensure VRAM is consistent after a
GPU reset, page<br>
> table shadowing is necessary. Shadowed page tables
are, in a sense, a<br>
> method to recover the consistent state of the page
tables before the<br>
> reset occurred.<br>
><br>
> We need to allocate GTT bo as the shadow of VRAM bo
when creating page table,<br>
> and make them the same. After gpu reset, we will
need to use SDMA to copy GTT bo<br>
> content to VRAM bo, then page table will be
recoveried.<br>
><br>
><br>
> V2:<br>
> Shadow bo uses a shadow entity running on normal
run queue, after gpu reset,<br>
> we need to wait for all shadow jobs finished first,
then recovery page table from shadow.<br>
><br>
> V3:<br>
> Addressed Christian comments for shadow bo part.<br>
><br>
> V4:<br>
> Switch back to update page table twice (one of two
is for shadow)<br>
><br>
> V5:<br>
> make it be gerneic shadow bo support. Address
Christian comments.<br>
><br>
> Chunming Zhou (8):<br>
> drm/amdgpu: add need backup function V2<br>
> drm/amdgpu: add direct submision option for
copy_buffer<br>
> drm/amdgpu: sync bo and shadow V2<br>
> drm/amdgpu: update pd shadow while updating pd<br>
> drm/amdgpu: update pt shadow while updating pt
V2<br>
> drm/amdgpu: link all shadow bo<br>
> drm/amdgpu: implement recovery vram bo from
shadow<br>
> drm/amdgpu: recover vram bo from shadow after
gpu reset<br>
><br>
> drivers/gpu/drm/amd/amdgpu/amdgpu.h |
9 ++-<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c |
3 +-<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |
39 ++++++++++-<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_object.c |
94 ++++++++++++++++++++++++++-<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_object.h |
9 +++<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_test.c |
4 +-<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c |
21 ++++--<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c |
69 ++++++++++++++------<br>
> 8 files changed, 215 insertions(+), 33
deletions(-)<br>
><br>
<br>
_______________________________________________<br>
amd-gfx mailing list<br>
<a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
<a moz-do-not-send="true"
href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx"
id="LPlnk214970">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a>
<div id="LPBorder_GT_14714429737800.4406300387876183"
style="margin-bottom: 20px; overflow: auto; width:
100%; text-indent: 0px;">
<table
id="LPContainer_14714429737780.3993206472027586"
style="width: 90%; position: relative; overflow:
auto; padding-top: 20px; padding-bottom: 20px;
margin-top: 20px; border-top: 1px dotted rgb(200,
200, 200); border-bottom: 1px dotted rgb(200, 200,
200); background-color: rgb(255, 255, 255);"
cellspacing="0">
<tbody>
<tr style="border-spacing: 0px;" valign="top">
<td
id="TextCell_14714429737790.7705126490415855"
colspan="2" style="vertical-align: top;
position: relative; padding: 0px; display:
table-cell;">
<div
id="LPTitle_14714429737790.7634184458877278"
style="top: 0px; color: rgb(59, 87, 119);
font-weight: normal; font-size: 21px;
font-family: wf_segoe-ui_light, "Segoe
UI Light", "Segoe WP Light",
"Segoe UI", "Segoe WP",
Tahoma, Arial, sans-serif; line-height:
21px;">
<a moz-do-not-send="true"
id="LPUrlAnchor_14714429737790.6135333253292945"
href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx"
target="_blank" style="text-decoration:
none;">amd-gfx Info Page -
lists.freedesktop.org</a></div>
<div
id="LPMetadata_14714429737790.9058058508163938"
style="margin: 10px 0px 16px; color:
rgb(102, 102, 102); font-weight: normal;
font-family: wf_segoe-ui_normal, "Segoe
UI", "Segoe WP", Tahoma,
Arial, sans-serif; font-size: 14px;
line-height: 14px;">
lists.freedesktop.org</div>
<div
id="LPDescription_14714429737800.03199008072574672"
style="display: block; color: rgb(102, 102,
102); font-weight: normal; font-family:
wf_segoe-ui_normal, "Segoe UI",
"Segoe WP", Tahoma, Arial,
sans-serif; font-size: 14px; line-height:
20px; max-height: 100px; overflow: hidden;">
To see the collection of prior postings to
the list, visit the amd-gfx Archives. Using
amd-gfx: To post a message to all the list
members, send email ...</div>
</td>
</tr>
</tbody>
</table>
</div>
<br>
<br>
</div>
</span></font></div>
</div>
</blockquote>
<p><br>
</p>
</body>
</html>