<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=iso-8859-1">
<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:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">+<a id="OWAAM94D75218BDAB4D8080182546162D8937" href="mailto:Jimshed.Mirza@amd.com"><span style="font-family:"Calibri",sans-serif;text-decoration:none">@Mirza, Jimshed</span></a>: do we have the ability to snoop another GPU’s cache, in a
 multiple GPU system?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Regards,<o:p></o:p></p>
<p class="MsoNormal">Oak<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Deucher, Alexander <Alexander.Deucher@amd.com> <br>
<b>Sent:</b> Thursday, August 8, 2019 12:10 PM<br>
<b>To:</b> Zeng, Oak <Oak.Zeng@amd.com>; Koenig, Christian <Christian.Koenig@amd.com>; amd-gfx@lists.freedesktop.org<br>
<b>Cc:</b> Kuehling, Felix <Felix.Kuehling@amd.com>; Keely, Sean <Sean.Keely@amd.com><br>
<b>Subject:</b> Re: [PATCH 1/5] drm/amdgpu: Extends amdgpu vm definitions<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black">The snoop bit is for snooping the CPU cache by the GPU when doing system memory mappings.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black">Alex<o:p></o:p></span></p>
</div>
<div class="MsoNormal" align="center" style="text-align:center">
<hr size="2" width="98%" align="center">
</div>
<div id="divRplyFwdMsg">
<p class="MsoNormal"><b><span style="color:black">From:</span></b><span style="color:black"> amd-gfx <<a href="mailto:amd-gfx-bounces@lists.freedesktop.org">amd-gfx-bounces@lists.freedesktop.org</a>> on behalf of Zeng, Oak <<a href="mailto:Oak.Zeng@amd.com">Oak.Zeng@amd.com</a>><br>
<b>Sent:</b> Thursday, August 8, 2019 12:02 PM<br>
<b>To:</b> Koenig, Christian <<a href="mailto:Christian.Koenig@amd.com">Christian.Koenig@amd.com</a>>;
<a href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a> <<a href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a>><br>
<b>Cc:</b> Kuehling, Felix <<a href="mailto:Felix.Kuehling@amd.com">Felix.Kuehling@amd.com</a>>; Keely, Sean <<a href="mailto:Sean.Keely@amd.com">Sean.Keely@amd.com</a>><br>
<b>Subject:</b> RE: [PATCH 1/5] drm/amdgpu: Extends amdgpu vm definitions</span> <o:p>
</o:p></p>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">Hi Christian,<br>
<br>
My understanding of the snoop bit (C bit in the PTE definition) is to probe remote gpu's L2 cache after this gpu write remote gpu's vram. Is this correct? I am still checking this point with HW engineer.<br>
<br>
If this is correct, then the snooping (or probing) is a way to maintain certain cache coherency when one memory is access by two masters (for example two gpu). With existing AMDGPU_VM_ definitions in amdgpu_drm.h, how does a user implement the request like:
 I want a trunk of vram physically in a remote gpu, I want to access it in a uncached way (AMDGPU_VM_MTYPE_UC) but I want to probe remote gpu's cache when I modify this vram.<br>
<br>
>From PTE's definition, both C bit and mtype and R/W/X bits are just flags to enable user to program page access behavior. Any detail reason why we shouldn't expose the snoop bit?<br>
<br>
Regards,<br>
Oak<br>
<br>
-----Original Message-----<br>
From: Christian König <<a href="mailto:ckoenig.leichtzumerken@gmail.com">ckoenig.leichtzumerken@gmail.com</a>>
<br>
Sent: Wednesday, August 7, 2019 4:42 AM<br>
To: Zeng, Oak <<a href="mailto:Oak.Zeng@amd.com">Oak.Zeng@amd.com</a>>; <a href="mailto:amd-gfx@lists.freedesktop.org">
amd-gfx@lists.freedesktop.org</a><br>
Cc: Kuehling, Felix <<a href="mailto:Felix.Kuehling@amd.com">Felix.Kuehling@amd.com</a>>; Koenig, Christian <<a href="mailto:Christian.Koenig@amd.com">Christian.Koenig@amd.com</a>>; Keely, Sean <<a href="mailto:Sean.Keely@amd.com">Sean.Keely@amd.com</a>><br>
Subject: Re: [PATCH 1/5] drm/amdgpu: Extends amdgpu vm definitions<br>
<br>
Am 07.08.19 um 04:31 schrieb Zeng, Oak:<br>
> Add definition of all supported mtypes. The RW mtype is recently <br>
> introduced for arcturus. Also add definition for the <br>
> cachable/snoopable bit, which will be used later in this series.<br>
><br>
> Change-Id: I96fc9bb4b6b1e62bdc10b600d8aaa6a802128d6d<br>
> Signed-off-by: Oak Zeng <<a href="mailto:Oak.Zeng@amd.com">Oak.Zeng@amd.com</a>><br>
> ---<br>
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 9 +++++++--<br>
>   include/uapi/drm/amdgpu_drm.h          | 4 ++++<br>
>   2 files changed, 11 insertions(+), 2 deletions(-)<br>
><br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h <br>
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h<br>
> index 2eda3a8..7a77477 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h<br>
> @@ -80,8 +80,13 @@ struct amdgpu_bo_list_entry;<br>
>   #define AMDGPU_PTE_MTYPE_VG10(a)    ((uint64_t)(a) << 57)<br>
>   #define AMDGPU_PTE_MTYPE_VG10_MASK  AMDGPU_PTE_MTYPE_VG10(3ULL)<br>
>   <br>
> -#define AMDGPU_MTYPE_NC 0<br>
> -#define AMDGPU_MTYPE_CC 2<br>
> +enum amdgpu_mtype {<br>
> +     AMDGPU_MTYPE_NC = 0,<br>
> +     AMDGPU_MTYPE_WC = 1,<br>
> +     AMDGPU_MTYPE_CC = 2,<br>
> +     AMDGPU_MTYPE_UC = 3,<br>
> +     AMDGPU_MTYPE_RW = 4,<br>
> +};<br>
>   <br>
>   #define AMDGPU_PTE_DEFAULT_ATC  (AMDGPU_PTE_SYSTEM      \<br>
>                                   | AMDGPU_PTE_SNOOPED    \<br>
> diff --git a/include/uapi/drm/amdgpu_drm.h <br>
> b/include/uapi/drm/amdgpu_drm.h index ca97b68..2889663 100644<br>
> --- a/include/uapi/drm/amdgpu_drm.h<br>
> +++ b/include/uapi/drm/amdgpu_drm.h<br>
> @@ -503,6 +503,10 @@ struct drm_amdgpu_gem_op {<br>
>   #define AMDGPU_VM_MTYPE_CC          (3 << 5)<br>
>   /* Use UC MTYPE instead of default MTYPE */<br>
>   #define AMDGPU_VM_MTYPE_UC          (4 << 5)<br>
> +/* Use RW MTYPE instead of default MTYPE */<br>
> +#define AMDGPU_VM_MTYPE_RW           (5 << 5)<br>
<br>
> +/* Cacheable/snoopable */<br>
> +#define AMDGPU_VM_PAGE_SNOOPED               (1 << 9)<br>
<br>
That's a rather big NAK. Cache snooping is not something userspace is allowed to be aware of.<br>
<br>
Christian.<br>
<br>
>   <br>
>   struct drm_amdgpu_gem_va {<br>
>        /** GEM object handle */<br>
<br>
_______________________________________________<br>
amd-gfx mailing list<br>
<a href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><o:p></o:p></p>
</div>
</div>
</div>
</body>
</html>