<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 6/22/2021 10:36 AM, Christian König
      wrote:<br>
    </div>
    <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"><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. 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>
    <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>
    <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">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&amp;data=04%7C01%7Cnirmoy.das%40amd.com%7C3285a973b5a4498f3b0608d93558d909%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637599478002028860%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=QLv4hbUpPF9H%2BVL4eOQlTeROWQA%2FG1LrPGFBzCQRt7o%3D&amp;reserved=0">https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&amp;data=04%7C01%7Cnirmoy.das%40amd.com%7C3285a973b5a4498f3b0608d93558d909%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637599478002028860%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=QLv4hbUpPF9H%2BVL4eOQlTeROWQA%2FG1LrPGFBzCQRt7o%3D&amp;reserved=0</a>
        <br>
      </blockquote>
      <br>
    </blockquote>
  </body>
</html>