<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=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<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:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Aptos;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.EmailStyle23
        {mso-style-type:personal-reply;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@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" style="word-wrap:break-word">
<p style="font-family:Calibri;font-size:10pt;color:#0000FF;margin:5pt;font-style:normal;font-weight:normal;text-decoration:none;" align="Left">
[AMD Official Use Only - AMD Internal Distribution Only]<br>
</p>
<br>
<div>
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Responses inline. Will post new patch after testing<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">Regards,</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">Ramesh</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black"> </span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Kasiviswanathan, Harish <Harish.Kasiviswanathan@amd.com>
<br>
<b>Sent:</b> Wednesday, August 28, 2024 1:37 PM<br>
<b>To:</b> Yang, Philip <Philip.Yang@amd.com>; Errabolu, Ramesh <Ramesh.Errabolu@amd.com>; amd-gfx@lists.freedesktop.org<br>
<b>Subject:</b> RE: [PATCH v2] drm/amdgpu: Surface svm_attr_gobm, a RW module parameter<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p style="margin:5.0pt"><span style="font-size:10.0pt;font-family:"Calibri",sans-serif;color:blue">[AMD Official Use Only - AMD Internal Distribution Only]<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Some comments inline.<o:p></o:p></p>
<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><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> amd-gfx <<a href="mailto:amd-gfx-bounces@lists.freedesktop.org">amd-gfx-bounces@lists.freedesktop.org</a>>
<b>On Behalf Of </b>Philip Yang<br>
<b>Sent:</b> Wednesday, August 28, 2024 11:49 AM<br>
<b>To:</b> Errabolu, Ramesh <<a href="mailto:Ramesh.Errabolu@amd.com">Ramesh.Errabolu@amd.com</a>>;
<a href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
<b>Subject:</b> Re: [PATCH v2] drm/amdgpu: Surface svm_attr_gobm, a RW module parameter<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p><o:p> </o:p></p>
<div>
<p class="MsoNormal">On 2024-08-26 15:34, Ramesh Errabolu wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>Enables users to update the default size of buffer used<o:p></o:p></pre>
<pre>in migration either from Sysmem to VRAM or vice versa.<o:p></o:p></pre>
<pre>The param GOBM refers to granularity of buffer migration,<o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Aptos",sans-serif"><o:p> </o:p></span></pre>
<pre><span style="font-size:12.0pt;font-family:"Aptos",sans-serif">[HK]: Include the module param name here. <o:p></o:p></span></pre>
<pre><span style="font-size:12.0pt;font-family:"Aptos",sans-serif">[Ramesh] Changed param name to svm_default_granularity. It is included as part of the header.<o:p></o:p></span></pre>
<pre><span style="font-size:11.0pt;font-family:"Aptos",sans-serif"><o:p> </o:p></span></pre>
<pre>and is specified in terms of log(numPages(buffer)). It<o:p></o:p></pre>
<pre>facilitates users of unregistered memory to control GOBM,<o:p></o:p></pre>
</blockquote>
<p class="MsoNormal" style="margin-bottom:12.0pt">it is used for both registered and unregistered range cases.<o:p></o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt">Ramesh: Removed reference to unregistered memory as it is technically possible to update granularity by calling set_svm_attr() ioctl<span style="color:red"><o:p></o:p></span></span></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre>albeit at a coarse level<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Signed-off-by: Ramesh Errabolu <a href="mailto:Ramesh.Errabolu@amd.com"><Ramesh.Errabolu@amd.com></a><o:p></o:p></pre>
<pre>---<o:p></o:p></pre>
<pre> drivers/gpu/drm/amd/amdgpu/amdgpu.h     |  4 ++++<o:p></o:p></pre>
<pre> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 18 +++++++++++++++++<o:p></o:p></pre>
<pre> drivers/gpu/drm/amd/amdkfd/kfd_priv.h   | 12 ++++++++++++<o:p></o:p></pre>
<pre> drivers/gpu/drm/amd/amdkfd/kfd_svm.c    | 26 ++++++++++++++++---------<o:p></o:p></pre>
<pre> 4 files changed, 51 insertions(+), 9 deletions(-)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<o:p></o:p></pre>
<pre>index e8c284aea1f2..73dd816b01f2 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<o:p></o:p></pre>
<pre>@@ -237,6 +237,7 @@ extern int sched_policy;<o:p></o:p></pre>
<pre> extern bool debug_evictions;<o:p></o:p></pre>
<pre> extern bool no_system_mem_limit;<o:p></o:p></pre>
<pre> extern int halt_if_hws_hang;<o:p></o:p></pre>
<pre>+extern uint amdgpu_svm_attr_gobm;<o:p></o:p></pre>
<pre> #else<o:p></o:p></pre>
<pre> static const int __maybe_unused sched_policy = KFD_SCHED_POLICY_HWS;<o:p></o:p></pre>
<pre> static const bool __maybe_unused debug_evictions; /* = false */<o:p></o:p></pre>
<pre>@@ -313,6 +314,9 @@ extern int amdgpu_wbrf;<o:p></o:p></pre>
<pre> /* Extra time delay(in ms) to eliminate the influence of temperature momentary fluctuation */<o:p></o:p></pre>
<pre> #define AMDGPU_SWCTF_EXTRA_DELAY              50<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+/* Default size of buffer to use in migrating buffer */<o:p></o:p></pre>
<pre>+#define AMDGPU_SVM_ATTR_GOBM       9<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Aptos",sans-serif"><o:p> </o:p></span></pre>
<pre><span style="font-size:12.0pt;font-family:"Aptos",sans-serif">[HK]: Don’t think this #define is need. You can just use 9 directly as other module parameters for default value.<o:p></o:p></span></pre>
<pre><span style="font-size:11.0pt;font-family:"Aptos",sans-serif">[Ramesh] Removed it<o:p></o:p></span></pre>
<pre><span style="font-size:12.0pt;font-family:"Aptos",sans-serif"><o:p> </o:p></span></pre>
<pre> struct amdgpu_xcp_mgr;<o:p></o:p></pre>
<pre> struct amdgpu_device;<o:p></o:p></pre>
<pre> struct amdgpu_irq_src;<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<o:p></o:p></pre>
<pre>index b9529948f2b2..09c501753a3b 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<o:p></o:p></pre>
<pre>@@ -169,6 +169,17 @@ uint amdgpu_sdma_phase_quantum = 32;<o:p></o:p></pre>
<pre> char *amdgpu_disable_cu;<o:p></o:p></pre>
<pre> char *amdgpu_virtual_display;<o:p></o:p></pre>
<pre> bool enforce_isolation;<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+/* Specifies the default size of buffer to use in<o:p></o:p></pre>
<pre>+ * migrating buffer from Sysmem to VRAM and vice<o:p></o:p></pre>
<pre>+ * versa<o:p></o:p></pre>
<pre>+ *<o:p></o:p></pre>
<pre>+ * GOBM - Granularity of Buffer Migration<o:p></o:p></pre>
<pre>+ *<o:p></o:p></pre>
<pre>+ * Defined as log2(sizeof(buffer)/PAGE_SIZE)<o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Aptos",sans-serif"><o:p> </o:p></span></pre>
<pre><span style="font-size:12.0pt;font-family:"Aptos",sans-serif">[HK]: Use of log is unnecessary here and other places. You can just state is size is exponent of 2. <o:p></o:p></span></pre>
<pre><span style="font-size:11.0pt;font-family:"Aptos",sans-serif">[Ramesh] Updated comment to state that this symbol server two purposes – buffer migration and page fault handling. Value of granularity is defined as log(2^Pages) so that aspect has to be highlighted. How this is interpreted, including any scaling is opaque<o:p></o:p></span></pre>
<pre><span style="font-size:12.0pt;font-family:"Aptos",sans-serif"><o:p> </o:p></span></pre>
<pre>+ */<o:p></o:p></pre>
<pre>+uint amdgpu_svm_attr_gobm = AMDGPU_SVM_ATTR_GOBM;<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> /*<o:p></o:p></pre>
<pre>  * OverDrive(bit 14) disabled by default<o:p></o:p></pre>
<pre>  * GFX DCS(bit 19) disabled by default<o:p></o:p></pre>
<pre>@@ -320,6 +331,13 @@ module_param_named(pcie_gen2, amdgpu_pcie_gen2, int, 0444);<o:p></o:p></pre>
<pre> MODULE_PARM_DESC(msi, "MSI support (1 = enable, 0 = disable, -1 = auto)");<o:p></o:p></pre>
<pre> module_param_named(msi, amdgpu_msi, int, 0444);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+/**<o:p></o:p></pre>
<pre>+ * DOC: svm_attr_gobm (uint)<o:p></o:p></pre>
<pre>+ * Size of buffer to use in migrating buffer from Sysmem to VRAM and vice versa<o:p></o:p></pre>
<pre>+ */<o:p></o:p></pre>
<pre>+MODULE_PARM_DESC(svm_attr_gobm, "Defined as log2(sizeof(buffer)/PAGE_SIZE), e.g. 9 for 2 MiB");<o:p></o:p></pre>
<pre>+module_param_named(svm_attr_gobm, amdgpu_svm_attr_gobm, uint, 0644);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> /**<o:p></o:p></pre>
<pre>  * DOC: lockup_timeout (string)<o:p></o:p></pre>
<pre>  * Set GPU scheduler timeout value in ms.<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h<o:p></o:p></pre>
<pre>index 9ae9abc6eb43..c2e54b18c167 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h<o:p></o:p></pre>
<pre>@@ -868,6 +868,18 @@ struct svm_range_list {<o:p></o:p></pre>
<pre>  struct task_struct       *faulting_task;<o:p></o:p></pre>
<pre>  /* check point ts decides if page fault recovery need be dropped */<o:p></o:p></pre>
<pre>  uint64_t                 checkpoint_ts[MAX_GPU_INSTANCE];<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+ /* Indicates the default size to use in migrating<o:p></o:p></pre>
<pre>+  * buffers of a process from Sysmem to VRAM and vice<o:p></o:p></pre>
<pre>+  * versa. The max legal value cannot be greater than<o:p></o:p></pre>
<pre>+  * 0x3F<o:p></o:p></pre>
<pre>+  *<o:p></o:p></pre>
<pre>+  * @note: A side effect of this symbol being part of<o:p></o:p></pre>
<pre>+  * struct svm_range_list is that it forces all buffers<o:p></o:p></pre>
<pre>+  * of the process of unregistered kind to use the same<o:p></o:p></pre>
<pre>+  * size in buffer migration<o:p></o:p></pre>
<pre>+  */<o:p></o:p></pre>
</blockquote>
<p class="MsoNormal" style="margin-bottom:12.0pt">The comment is good enough, note maybe misleading, not needed.<o:p></o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt">[Ramesh]: Removed references to unregistered memory users in the NOTE section.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre>+ uint8_t attr_gobm;<o:p></o:p></pre>
<pre> };<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> /* Process data */<o:p></o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c<o:p></o:p></pre>
<pre>index b44dec90969f..78c78baddb1f 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c<o:p></o:p></pre>
<pre>@@ -309,12 +309,11 @@ static void svm_range_free(struct svm_range *prange, bool do_unmap)<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> static void<o:p></o:p></pre>
<pre>-svm_range_set_default_attributes(int32_t *location, int32_t *prefetch_loc,<o:p></o:p></pre>
<pre>-                         uint8_t *granularity, uint32_t *flags)<o:p></o:p></pre>
<pre>+svm_range_set_default_attributes(int32_t *location,<o:p></o:p></pre>
<pre>+                int32_t *prefetch_loc, uint32_t *flags)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre>  *location = KFD_IOCTL_SVM_LOCATION_UNDEFINED;<o:p></o:p></pre>
<pre>  *prefetch_loc = KFD_IOCTL_SVM_LOCATION_UNDEFINED;<o:p></o:p></pre>
<pre>- *granularity = 9;<o:p></o:p></pre>
</blockquote>
<p>as svm_range_set_default_attributes is called in multiple places, add new parameter struct svm_range_list *svms, to remove the duplicate code.<o:p></o:p></p>
<p><span style="font-size:11.0pt">Ramesh: Restored the original function signature i.e. set granularity inside the set_default_attributes() function<o:p></o:p></span></p>
<pre>*granularity = svms->attr_gobm;<o:p></o:p></pre>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre>  *flags =<o:p></o:p></pre>
<pre>         KFD_IOCTL_SVM_FLAG_HOST_ACCESS | KFD_IOCTL_SVM_FLAG_COHERENT;<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre>@@ -358,9 +357,9 @@ svm_range *svm_range_new(struct svm_range_list *svms, uint64_t start,<o:p></o:p></pre>
<pre>         bitmap_copy(prange->bitmap_access, svms->bitmap_supported,<o:p></o:p></pre>
<pre>                     MAX_GPU_INSTANCE);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+ prange->granularity = svms->attr_gobm;<o:p></o:p></pre>
<pre>  svm_range_set_default_attributes(&prange->preferred_loc,<o:p></o:p></pre>
<pre>-                                &prange->prefetch_loc,<o:p></o:p></pre>
<pre>-                                &prange->granularity, &prange->flags);<o:p></o:p></pre>
<pre>+                        &prange->prefetch_loc, &prange->flags);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>  pr_debug("svms 0x%p [0x%llx 0x%llx]\n", svms, start, last);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>@@ -2693,10 +2692,12 @@ svm_range_get_range_boundaries(struct kfd_process *p, int64_t addr,<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>  *is_heap_stack = vma_is_initial_heap(vma) || vma_is_initial_stack(vma);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+ /* Determine the starting and ending page of prange */<o:p></o:p></pre>
</blockquote>
<p class="MsoNormal" style="margin-bottom:12.0pt">this comment is not helpful.<o:p></o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-size:11.0pt">Ramesh: removed it<o:p></o:p></span></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre>  start_limit = max(vma->vm_start >> PAGE_SHIFT,<o:p></o:p></pre>
<pre>-              (unsigned long)ALIGN_DOWN(addr, 2UL << 8));<o:p></o:p></pre>
<pre>+              (unsigned long)ALIGN_DOWN(addr, 1 << p->svms.attr_gobm));<o:p></o:p></pre>
</blockquote>
<p class="MsoNormal">1UL << p->svms.attr_gobm <o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Ramesh: done<o:p></o:p></span></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>  end_limit = min(vma->vm_end >> PAGE_SHIFT,<o:p></o:p></pre>
<pre>-            (unsigned long)ALIGN(addr + 1, 2UL << 8));<o:p></o:p></pre>
<pre>+            (unsigned long)ALIGN(addr + 1, 1 << p->svms.attr_gobm));<o:p></o:p></pre>
</blockquote>
<p>1UL << p->svms.attr_gobm<o:p></o:p></p>
<p><span style="font-size:11.0pt">Ramesh: done<o:p></o:p></span></p>
<p>Regards,<o:p></o:p></p>
<p>Philip<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>  /* First range that starts after the fault address */<o:p></o:p></pre>
<pre>  node = interval_tree_iter_first(&p->svms.objects, addr + 1, ULONG_MAX);<o:p></o:p></pre>
<pre>  if (node) {<o:p></o:p></pre>
<pre>@@ -3240,6 +3241,12 @@ int svm_range_list_init(struct kfd_process *p)<o:p></o:p></pre>
<pre>         if (KFD_IS_SVM_API_SUPPORTED(p->pdds[i]->dev->adev))<o:p></o:p></pre>
<pre>                 bitmap_set(svms->bitmap_supported, i, 1);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+ /* Bind granularity of buffer migration, either<o:p></o:p></pre>
<pre>+  * the default size or one specified by the user<o:p></o:p></pre>
<pre>+  */<o:p></o:p></pre>
<pre>+ svms->attr_gobm = min_t(u8, amdgpu_svm_attr_gobm, 0x3F);<o:p></o:p></pre>
<pre>+ pr_debug("Granularity Of Buffer Migration: %d\n", svms->attr_gobm);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>  return 0;<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>@@ -3767,8 +3774,9 @@ svm_range_get_attr(struct kfd_process *p, struct mm_struct *mm,<o:p></o:p></pre>
<pre>  node = interval_tree_iter_first(&svms->objects, start, last);<o:p></o:p></pre>
<pre>  if (!node) {<o:p></o:p></pre>
<pre>         pr_debug("range attrs not found return default values\n");<o:p></o:p></pre>
<pre>-   svm_range_set_default_attributes(&location, &prefetch_loc,<o:p></o:p></pre>
<pre>-                                        &granularity, &flags_and);<o:p></o:p></pre>
<pre>+        granularity = svms->attr_gobm;<o:p></o:p></pre>
<pre>+   svm_range_set_default_attributes(&location,<o:p></o:p></pre>
<pre>+                          &prefetch_loc, &flags_and);<o:p></o:p></pre>
<pre>         flags_or = flags_and;<o:p></o:p></pre>
<pre>         if (p->xnack_enabled)<o:p></o:p></pre>
<pre>                 bitmap_copy(bitmap_access, svms->bitmap_supported,<o:p></o:p></pre>
</blockquote>
</div>
</div>
</div>
</body>
</html>