<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Am 22.06.21 um 12:30 schrieb Das, Nirmoy:<br>
<blockquote type="cite"
cite="mid:564b4de5-b1fd-283e-85b8-7819c24bca10@amd.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<p>On 6/22/2021 10:36 AM, Christian König wrote:<br>
</p>
<blockquote type="cite"
cite="mid:9ff705c2-a4e4-dc37-041a-66c490d8f7ad@gmail.com">Am
22.06.21 um 09:39 schrieb Das, Nirmoy: <br>
<blockquote type="cite"> <br>
On 6/22/2021 9:03 AM, Christian König wrote: <br>
<blockquote type="cite"> <br>
<br>
Am 22.06.21 um 08:57 schrieb Nirmoy Das: <br>
<blockquote type="cite">Cleanup code related to vm pasid by
adding helper functions. <br>
<br>
Signed-off-by: Nirmoy Das <a
class="moz-txt-link-rfc2396E"
href="mailto:nirmoy.das@amd.com" moz-do-not-send="true"><nirmoy.das@amd.com></a>
<br>
--- <br>
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 105
++++++++++++------------- <br>
1 file changed, 50 insertions(+), 55 deletions(-) <br>
<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c <br>
index 63975bda8e76..6e476b173cbb 100644 <br>
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c <br>
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c <br>
@@ -87,6 +87,46 @@ struct amdgpu_prt_cb { <br>
struct dma_fence_cb cb; <br>
}; <br>
<br>
+static int amdgpu_vm_pasid_alloc(struct amdgpu_device
*adev, <br>
+ struct amdgpu_vm *vm, <br>
+ unsigned int pasid, <br>
+ unsigned int *vm_pasid) <br>
+{ <br>
+ unsigned long flags; <br>
+ int r; <br>
+ <br>
+ if (!pasid) <br>
+ return 0; <br>
+ <br>
+
spin_lock_irqsave(&adev->vm_manager.pasid_lock,
flags); <br>
+ r = idr_alloc(&adev->vm_manager.pasid_idr, vm,
pasid, pasid + 1, <br>
+ GFP_ATOMIC); <br>
+
spin_unlock_irqrestore(&adev->vm_manager.pasid_lock,
flags); <br>
+ if (r < 0) <br>
+ return r; <br>
+ if (vm_pasid) <br>
+ *vm_pasid = pasid; <br>
+ <br>
</blockquote>
<br>
Ok the more I read from this patch the less it makes sense.
<br>
<br>
We don't allocate the passid here, we just set it up in the
idr. <br>
<br>
What we could do is to replace the idr with an xarray, that
would certainly make more sense than this here. <br>
</blockquote>
<br>
<br>
xarray looks great, with that we don't need pasid_lock either.
<br>
</blockquote>
<br>
You still need the lock to protect against VM destruction while
looking things up, but you could switch to RCU for this instead.
<br>
</blockquote>
<p><br>
</p>
<font face="Helvetica, Arial, sans-serif">xarray has <span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;">xa_{lock|unloack}_irqsave() and </span><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;">adev->vm_manager.pasid_xa will
exist till devices's lifetime.</span></font></blockquote>
<br>
That's just a wrapper around the lock.<br>
<br>
<blockquote type="cite"
cite="mid:564b4de5-b1fd-283e-85b8-7819c24bca10@amd.com"><font
face="Helvetica, Arial, sans-serif"><span style="color: rgb(0,
0, 0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;">So I am thinking something like:<br>
</span><br>
</font>
<p><font face="Helvetica, Arial, sans-serif">amdgpu_vm_pasid_insert()
<br>
</font></p>
<p><font face="Helvetica, Arial, sans-serif">{</font></p>
<p><font face="Helvetica, Arial, sans-serif">...<br>
</font></p>
<font face="Helvetica, Arial, sans-serif"><span style="color:
rgb(0, 0, 0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"> <span style="color: rgb(0, 0, 0);
font-size: 16px; font-style: normal; font-variant-ligatures:
normal; font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; word-spacing:
0px; -webkit-text-stroke-width: 0px; background-color:
rgb(252, 252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">xa_lock_irqsave(</span></span><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0, 0);
font-size: 16px; font-style: normal; font-variant-ligatures:
normal; font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; word-spacing:
0px; -webkit-text-stroke-width: 0px; background-color:
rgb(252, 252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">adev->vm_manager.pasids,
flags)</span></span><br>
<span style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0, 0);
font-size: 16px; font-style: normal; font-variant-ligatures:
normal; font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; word-spacing:
0px; -webkit-text-stroke-width: 0px; background-color:
rgb(252, 252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">r =
xa_store(&adev->vm_manager.pasids, pasid, vm,
GFP_ATOMIC);</span></span><br>
<span style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0, 0);
font-size: 16px; font-style: normal; font-variant-ligatures:
normal; font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; word-spacing:
0px; -webkit-text-stroke-width: 0px; background-color:
rgb(252, 252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"> <span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"></span></span></span></span><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0, 0);
font-size: 16px; font-style: normal; font-variant-ligatures:
normal; font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; word-spacing:
0px; -webkit-text-stroke-width: 0px; background-color:
rgb(252, 252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">xa_unlock_irqsave(</span></span><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">adev->vm_manager.pasids,
flags)</span></span></span></span></font></blockquote>
<br>
It would be really nice if we could avoid the GFP_ATOMIC here, but
not much of a problem since we had that before.<br>
<br>
<blockquote type="cite"
cite="mid:564b4de5-b1fd-283e-85b8-7819c24bca10@amd.com">
<p><font face="Helvetica, Arial, sans-serif"><span style="color:
rgb(0, 0, 0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"></span>}</font></p>
<p><font face="Helvetica, Arial, sans-serif"><span style="color:
rgb(0, 0, 0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0, 0);
font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">amdgpu_vm_pasid_remove()</span></span></span></font></p>
<p><font face="Helvetica, Arial, sans-serif"><span style="color:
rgb(0, 0, 0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0, 0);
font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">{</span></span></span></font></p>
<p><font face="Helvetica, Arial, sans-serif"><span style="color:
rgb(0, 0, 0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0, 0);
font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">....<br>
</span></span></span></font></p>
<p><font face="Helvetica, Arial, sans-serif"><span style="color:
rgb(0, 0, 0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0, 0);
font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">xa_lock_irqsave(</span></span><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">adev->vm_manager.pasids,
flags)</span></span><br>
<span style="color: rgb(0, 0, 0); font-size: 16px;
font-style: normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0,
0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color:
rgb(252, 252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">xa_erase(&adev->vm_manager.pasids,
pasid);</span></span><br>
<span style="color: rgb(0, 0, 0); font-size: 16px;
font-style: normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0,
0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform:
none; white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color:
rgb(252, 252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px;
font-style: normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"> <span
style="color: rgb(0, 0, 0); font-size: 16px;
font-style: normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color:
rgb(252, 252, 252); text-decoration-thickness:
initial; text-decoration-style: initial;
text-decoration-color: initial; display: inline
!important; float: none;"></span></span></span></span><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px;
font-style: normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px;
font-style: normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color:
rgb(252, 252, 252); text-decoration-thickness:
initial; text-decoration-style: initial;
text-decoration-color: initial; display: inline
!important; float: none;">xa_unlock_irqsave(</span></span><span
style="color: rgb(0, 0, 0); font-size: 16px;
font-style: normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px; -webkit-text-stroke-width:
0px; background-color: rgb(252, 252, 252);
text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><span
style="color: rgb(0, 0, 0); font-size: 16px;
font-style: normal; font-variant-ligatures: normal;
font-variant-caps: normal; font-weight: 400;
letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space:
normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color:
rgb(252, 252, 252); text-decoration-thickness:
initial; text-decoration-style: initial;
text-decoration-color: initial; display: inline
!important; float: none;">adev->vm_manager.pasids,
flags)</span></span></span></span> </span></font></p>
<p><font face="Helvetica, Arial, sans-serif"><span style="color:
rgb(0, 0, 0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;">}</span></font></p>
<p><font face="Helvetica, Arial, sans-serif"><br>
<span style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"> <span
style="color: rgb(0, 0, 0); font-size: 16px; font-style:
normal; font-variant-ligatures: normal; font-variant-caps:
normal; font-weight: 400; letter-spacing: normal;
text-align: start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;">xa_{lock|unloack}_irqsave()
can be use while looking up vm ptr for a pasid.</span></span></font></p>
<p><font face="Helvetica, Arial, sans-serif"><span style="color:
rgb(0, 0, 0); font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align: start;
text-indent: 0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
background-color: rgb(252, 252, 252);
text-decoration-thickness: initial; text-decoration-style:
initial; text-decoration-color: initial; display: inline
!important; float: none;"><span style="color: rgb(0, 0, 0);
font-size: 16px; font-style: normal;
font-variant-ligatures: normal; font-variant-caps: normal;
font-weight: 400; letter-spacing: normal; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; word-spacing: 0px;
-webkit-text-stroke-width: 0px; background-color: rgb(252,
252, 252); text-decoration-thickness: initial;
text-decoration-style: initial; text-decoration-color:
initial; display: inline !important; float: none;"><br>
</span> </span></font></p>
<font face="Helvetica, Arial, sans-serif"> </font>
<p><font face="Helvetica, Arial, sans-serif">Shouldn't this be
enough ?</font></p>
</blockquote>
<br>
Yeah I think so.<br>
<br>
Christian.<br>
<br>
<blockquote type="cite"
cite="mid:564b4de5-b1fd-283e-85b8-7819c24bca10@amd.com">
<p><font face="Helvetica, Arial, sans-serif"><br>
</font></p>
<p><font face="Helvetica, Arial, sans-serif">Regards,</font></p>
<p><font face="Helvetica, Arial, sans-serif">Nirmoy</font><br>
</p>
<blockquote type="cite"
cite="mid:9ff705c2-a4e4-dc37-041a-66c490d8f7ad@gmail.com"> <br>
Christian. <br>
<br>
<blockquote type="cite"> <br>
<br>
Thanks <br>
<br>
Nirmoy <br>
<br>
<br>
<blockquote type="cite"> <br>
Christian. <br>
<br>
<blockquote type="cite">+ return 0; <br>
+} <br>
+ <br>
+static void amdgpu_vm_pasid_remove(struct amdgpu_device
*adev, <br>
+ unsigned int pasid, <br>
+ unsigned int *vm_pasid) <br>
+{ <br>
+ unsigned long flags; <br>
+ <br>
+ if (!pasid) <br>
+ return; <br>
+ <br>
+
spin_lock_irqsave(&adev->vm_manager.pasid_lock,
flags); <br>
+ idr_remove(&adev->vm_manager.pasid_idr,
pasid); <br>
+
spin_unlock_irqrestore(&adev->vm_manager.pasid_lock,
flags); <br>
+ <br>
+ if (vm_pasid) <br>
+ *vm_pasid = 0; <br>
+} <br>
+ <br>
/* <br>
* vm eviction_lock can be taken in MMU notifiers. Make
sure no reclaim-FS <br>
* happens while holding this lock anywhere to prevent
deadlocks when <br>
@@ -2940,18 +2980,8 @@ int amdgpu_vm_init(struct
amdgpu_device *adev, struct amdgpu_vm *vm, u32 pasid) <br>
<br>
amdgpu_bo_unreserve(vm->root.bo); <br>
<br>
- if (pasid) { <br>
- unsigned long flags; <br>
- <br>
- spin_lock_irqsave(&adev->vm_manager.pasid_lock,
flags); <br>
- r = idr_alloc(&adev->vm_manager.pasid_idr,
vm, pasid, pasid + 1, <br>
- GFP_ATOMIC); <br>
-
spin_unlock_irqrestore(&adev->vm_manager.pasid_lock,
flags); <br>
- if (r < 0) <br>
- goto error_free_root; <br>
- <br>
- vm->pasid = pasid; <br>
- } <br>
+ if (amdgpu_vm_pasid_alloc(adev, vm, pasid,
&vm->pasid)) <br>
+ goto error_free_root; <br>
<br>
INIT_KFIFO(vm->faults); <br>
<br>
@@ -3038,19 +3068,11 @@ int amdgpu_vm_make_compute(struct
amdgpu_device *adev, struct amdgpu_vm *vm, <br>
r = amdgpu_vm_check_clean_reserved(adev, vm); <br>
if (r) <br>
goto unreserve_bo; <br>
+ r = amdgpu_vm_pasid_alloc(adev, vm, pasid, NULL); <br>
+ if (r == -ENOSPC) <br>
+ goto unreserve_bo; <br>
<br>
- if (pasid) { <br>
- unsigned long flags; <br>
- <br>
- spin_lock_irqsave(&adev->vm_manager.pasid_lock,
flags); <br>
- r = idr_alloc(&adev->vm_manager.pasid_idr,
vm, pasid, pasid + 1, <br>
- GFP_ATOMIC); <br>
-
spin_unlock_irqrestore(&adev->vm_manager.pasid_lock,
flags); <br>
- <br>
- if (r == -ENOSPC) <br>
- goto unreserve_bo; <br>
- r = 0; <br>
- } <br>
+ r = 0; <br>
<br>
/* Check if PD needs to be reinitialized and do it
before <br>
* changing any other state, in case it fails. <br>
@@ -3089,35 +3111,23 @@ int amdgpu_vm_make_compute(struct
amdgpu_device *adev, struct amdgpu_vm *vm, <br>
vm->is_compute_context = true; <br>
<br>
if (vm->pasid) { <br>
- unsigned long flags; <br>
- <br>
- spin_lock_irqsave(&adev->vm_manager.pasid_lock,
flags); <br>
- idr_remove(&adev->vm_manager.pasid_idr,
vm->pasid); <br>
-
spin_unlock_irqrestore(&adev->vm_manager.pasid_lock,
flags); <br>
- <br>
/* Free the original amdgpu allocated pasid <br>
* Will be replaced with kfd allocated pasid <br>
*/ <br>
amdgpu_pasid_free(vm->pasid); <br>
- vm->pasid = 0; <br>
+ amdgpu_vm_pasid_remove(adev, vm->pasid,
&vm->pasid); <br>
} <br>
<br>
/* Free the shadow bo for compute VM */ <br>
amdgpu_bo_unref(&to_amdgpu_bo_vm(vm->root.bo)->shadow); <br>
- <br>
if (pasid) <br>
vm->pasid = pasid; <br>
<br>
goto unreserve_bo; <br>
<br>
free_idr: <br>
- if (pasid) { <br>
- unsigned long flags; <br>
+ amdgpu_vm_pasid_remove(adev, pasid, NULL); <br>
<br>
- spin_lock_irqsave(&adev->vm_manager.pasid_lock,
flags); <br>
- idr_remove(&adev->vm_manager.pasid_idr,
pasid); <br>
-
spin_unlock_irqrestore(&adev->vm_manager.pasid_lock,
flags); <br>
- } <br>
unreserve_bo: <br>
amdgpu_bo_unreserve(vm->root.bo); <br>
return r; <br>
@@ -3133,14 +3143,7 @@ int amdgpu_vm_make_compute(struct
amdgpu_device *adev, struct amdgpu_vm *vm, <br>
*/ <br>
void amdgpu_vm_release_compute(struct amdgpu_device
*adev, struct amdgpu_vm *vm) <br>
{ <br>
- if (vm->pasid) { <br>
- unsigned long flags; <br>
- <br>
- spin_lock_irqsave(&adev->vm_manager.pasid_lock,
flags); <br>
- idr_remove(&adev->vm_manager.pasid_idr,
vm->pasid); <br>
-
spin_unlock_irqrestore(&adev->vm_manager.pasid_lock,
flags); <br>
- } <br>
- vm->pasid = 0; <br>
+ amdgpu_vm_pasid_remove(adev, vm->pasid,
&vm->pasid); <br>
vm->is_compute_context = false; <br>
} <br>
<br>
@@ -3164,15 +3167,7 @@ void amdgpu_vm_fini(struct
amdgpu_device *adev, struct amdgpu_vm *vm) <br>
<br>
root = amdgpu_bo_ref(vm->root.bo); <br>
amdgpu_bo_reserve(root, true); <br>
- if (vm->pasid) { <br>
- unsigned long flags; <br>
- <br>
- spin_lock_irqsave(&adev->vm_manager.pasid_lock,
flags); <br>
- idr_remove(&adev->vm_manager.pasid_idr,
vm->pasid); <br>
-
spin_unlock_irqrestore(&adev->vm_manager.pasid_lock,
flags); <br>
- vm->pasid = 0; <br>
- } <br>
- <br>
+ amdgpu_vm_pasid_remove(adev, vm->pasid,
&vm->pasid); <br>
dma_fence_wait(vm->last_unlocked, false); <br>
dma_fence_put(vm->last_unlocked); <br>
<br>
-- <br>
2.32.0 <br>
<br>
</blockquote>
<br>
</blockquote>
_______________________________________________ <br>
amd-gfx mailing list <br>
<a class="moz-txt-link-abbreviated"
href="mailto:amd-gfx@lists.freedesktop.org"
moz-do-not-send="true">amd-gfx@lists.freedesktop.org</a> <br>
<a class="moz-txt-link-freetext"
href="https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=04%7C01%7Cnirmoy.das%40amd.com%7C3285a973b5a4498f3b0608d93558d909%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637599478002028860%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=QLv4hbUpPF9H%2BVL4eOQlTeROWQA%2FG1LrPGFBzCQRt7o%3D&reserved=0"
moz-do-not-send="true">https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=04%7C01%7Cnirmoy.das%40amd.com%7C3285a973b5a4498f3b0608d93558d909%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637599478002028860%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=QLv4hbUpPF9H%2BVL4eOQlTeROWQA%2FG1LrPGFBzCQRt7o%3D&reserved=0</a>
<br>
</blockquote>
<br>
</blockquote>
</blockquote>
<br>
</body>
</html>