<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Ok then we have a misunderstanding
      here. This applies to all per VM BOs, not just kernel BOs.<br>
      <br>
      It's just that as long as the per VM BOs aren't used the handling
      is still correct and we don't have any updates to UMD BOs we
      implicitly wait on.<br>
      <br>
      Sorry I should have waited a bit more, but since it is a very
      rather urgent bug fix I've already pushed it with Rogers rb.<br>
      <br>
      Regards,<br>
      Christian.<br>
      <br>
      Am 11.09.2017 um 13:42 schrieb Zhou, David(ChunMing):<br>
    </div>
    <blockquote type="cite"
cite="mid:MWHPR1201MB0206240AA6FA420B2EDA5677B4680@MWHPR1201MB0206.namprd12.prod.outlook.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="Generator" content="Microsoft Exchange Server">
      <!-- converted from text -->
      <style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
      <div>My mean is you should add a condition in code to check if BO is kernel BO or not. I expect V3.<br>
        <br>
        Regards,<br>
        David<br>
        <br>
        <p dir="ltr" style="display:inline"><span style="color:#888888"><span
              style="font-size:0.81em">发自坚果 Pro</span></span></p>
        <style type="text/css">
<!--
* body
        {padding:0 16px 30px!important;
        margin:0!important;
        background-color:#ffffff;
        line-height:1.4;
        word-wrap:break-word;
        word-break:normal}
div
        {word-wrap:break-word;
        word-break:normal}
p
        {word-wrap:break-word;
        word-break:normal;
        text-indent:0pt!important}
span
        {word-wrap:break-word;
        word-break:normal}
a
        {word-wrap:break-word;
        word-break:normal}
td
        {word-wrap:break-word;
        word-break:break-all}
-->
</style>
        <div class="x_quote">
          <div style="margin:0 0px; font-size:105%"><font
              style="line-height:1.4" color="#629140"><span>He, Roger
                <a class="moz-txt-link-rfc2396E" href="mailto:Hongbo.He@amd.com"><Hongbo.He@amd.com></a> 于 2017年9月11日 下午6:57写道:</span></font></div>
          <br type="attribution">
        </div>
      </div>
      <font size="2"><span style="font-size:10pt;">
          <div class="PlainText">Reviewed-by: Roger He
            <a class="moz-txt-link-rfc2396E" href="mailto:Hongbo.He@amd.com"><Hongbo.He@amd.com></a><br>
            <br>
            Thanks<br>
            Roger(Hongbo.He)<br>
            -----Original Message-----<br>
            From: amd-gfx [<a
              href="mailto:amd-gfx-bounces@lists.freedesktop.org"
              moz-do-not-send="true">mailto:amd-gfx-bounces@lists.freedesktop.org</a>]
            On Behalf Of Christian K?nig<br>
            Sent: Monday, September 11, 2017 6:53 PM<br>
            To: Zhou, David(ChunMing) <a class="moz-txt-link-rfc2396E" href="mailto:David1.Zhou@amd.com"><David1.Zhou@amd.com></a>;
            <a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
            Subject: Re: [PATCH] drm/amdgpu: fix VM sync with always
            valid BOs v2<br>
            <br>
            Am 11.09.2017 um 11:10 schrieb zhoucm1:<br>
            ><br>
            ><br>
            > On 2017年09月11日 17:04, Christian König wrote:<br>
            >>> NAK, as Roger pointed, the performance of
            Vulkan Dota2 drops from <br>
            >>> 72fps to 24fps.<br>
            >>><br>
            >>> This patches will kill Per-vm-BO advantages,
            even drop to 1/3 of <br>
            >>> previous non-per-vm-bo.<br>
            >><br>
            >> This is irrelevant and actually a foreseen
            consequence of per VM BOs.<br>
            >><br>
            >> If the performance drops is in-acceptable then the
            UMD shouldn't use <br>
            >> this feature.<br>
            > I got your mean, if UMD doesn't use this feature, then
            all BOs should <br>
            > be kernel only, then this change should only be limited
            to kernel VM <br>
            > BOs, not include UMD BOs.<br>
            > With this limitation, I think the change also can fix
            your issue.<br>
            <br>
            Correct, yes. Can I get your rb or ab now? We need to get
            this fixed asap.<br>
            <br>
            Thanks,<br>
            Christian.<br>
            <br>
            ><br>
            > Regards,<br>
            > David Zhou<br>
            >><br>
            >>> all moved and relocated fence have already
            synced, we just need to <br>
            >>> catch the va mapping but which is CS itself
            required, as my proposal <br>
            >>> in another thread, we maybe need to expand
            va_ioctl to return <br>
            >>> mapping fence to UMD, then UMD passes it to CS
            as dependency.<br>
            >><br>
            >> That can be an addition to the existing handling,
            but first of all <br>
            >> the current state must be corrected.<br>
            >><br>
            >> There are at least two bug reports on the open
            driver fixed by this, <br>
            >> so please review.<br>
            >><br>
            >> Thanks,<br>
            >> Christian.<br>
            >><br>
            >> Am 11.09.2017 um 10:59 schrieb zhoucm1:<br>
            >>> NAK, as Roger pointed, the performance of
            Vulkan Dota2 drops from <br>
            >>> 72fps to 24fps.<br>
            >>><br>
            >>> This patches will kill Per-vm-BO advantages,
            even drop to 1/3 of <br>
            >>> previous non-per-vm-bo.<br>
            >>><br>
            >>> all moved and relocated fence have already
            synced, we just need to <br>
            >>> catch the va mapping but which is CS itself
            required, as my proposal <br>
            >>> in another thread, we maybe need to expand
            va_ioctl to return <br>
            >>> mapping fence to UMD, then UMD passes it to CS
            as dependency.<br>
            >>><br>
            >>><br>
            >>> Regards,<br>
            >>><br>
            >>> David Zhou<br>
            >>><br>
            >>><br>
            >>> On 2017年09月11日 15:53, Christian König wrote:<br>
            >>>> From: Christian König
            <a class="moz-txt-link-rfc2396E" href="mailto:christian.koenig@amd.com"><christian.koenig@amd.com></a><br>
            >>>><br>
            >>>> All users of a VM must always wait for
            updates with always valid <br>
            >>>> BOs to be completed.<br>
            >>>><br>
            >>>> v2: remove debugging leftovers, rename
            struct member<br>
            >>>><br>
            >>>> Signed-off-by: Christian König
            <a class="moz-txt-link-rfc2396E" href="mailto:christian.koenig@amd.com"><christian.koenig@amd.com></a><br>
            >>>> ---<br>
            >>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c |
            10 ++++++----<br>
            >>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c |
            15 ++++++++++-----<br>
            >>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 
            2 +-<br>
            >>>>   3 files changed, 17 insertions(+), 10
            deletions(-)<br>
            >>>><br>
            >>>> diff --git
            a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c<br>
            >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c<br>
            >>>> index 8aa37e0..4681dcc 100644<br>
            >>>> ---
            a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c<br>
            >>>> +++
            b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c<br>
            >>>> @@ -752,10 +752,6 @@ static int
            amdgpu_bo_vm_update_pte(struct <br>
            >>>> amdgpu_cs_parser *p)<br>
            >>>>       if (r)<br>
            >>>>           return r;<br>
            >>>>   -    r = amdgpu_sync_fence(adev,
            &p->job->sync, <br>
            >>>> vm->last_dir_update);<br>
            >>>> -    if (r)<br>
            >>>> -        return r;<br>
            >>>> -<br>
            >>>>       r = amdgpu_vm_clear_freed(adev, vm,
            NULL);<br>
            >>>>       if (r)<br>
            >>>>           return r;<br>
            >>>> @@ -810,6 +806,12 @@ static int
            amdgpu_bo_vm_update_pte(struct <br>
            >>>> amdgpu_cs_parser *p)<br>
            >>>>       }<br>
            >>>>         r = amdgpu_vm_handle_moved(adev,
            vm, &p->job->sync);<br>
            >>>> +    if (r)<br>
            >>>> +        return r;<br>
            >>>> +<br>
            >>>> +    r = amdgpu_sync_fence(adev,
            &p->job->sync, vm->last_update);<br>
            >>>> +    if (r)<br>
            >>>> +        return r;<br>
            >>>>         if (amdgpu_vm_debug &&
            p->bo_list) {<br>
            >>>>           /* Invalidate all BOs to test for
            userspace bugs */ diff <br>
            >>>> --git
            a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c<br>
            >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c<br>
            >>>> index 55f1ecb..5042f09 100644<br>
            >>>> ---
            a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c<br>
            >>>> +++
            b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c<br>
            >>>> @@ -1140,9 +1140,8 @@ static int
            amdgpu_vm_update_level(struct <br>
            >>>> amdgpu_device *adev,<br>
            >>>>                   goto error_free;<br>
            >>>>                
            amdgpu_bo_fence(parent->base.bo, fence, true);<br>
            >>>> -           
            dma_fence_put(vm->last_dir_update);<br>
            >>>> -            vm->last_dir_update =
            dma_fence_get(fence);<br>
            >>>> -            dma_fence_put(fence);<br>
            >>>> +           
            dma_fence_put(vm->last_update);<br>
            >>>> +            vm->last_update = fence;<br>
            >>>>           }<br>
            >>>>       }<br>
            >>>>   @@ -1803,6 +1802,12 @@ int
            amdgpu_vm_bo_update(struct <br>
            >>>> amdgpu_device *adev,<br>
            >>>>              
            trace_amdgpu_vm_bo_mapping(mapping);<br>
            >>>>       }<br>
            >>>>   +    if (bo_va->base.bo &&<br>
            >>>> +        bo_va->base.bo->tbo.resv ==
            vm->root.base.bo->tbo.resv) {<br>
            >>>> +        dma_fence_put(vm->last_update);<br>
            >>>> +        vm->last_update =
            dma_fence_get(bo_va->last_pt_update);<br>
            >>>> +    }<br>
            >>>> +<br>
            >>>>       return 0;<br>
            >>>>   }<br>
            >>>>   @@ -2586,7 +2591,7 @@ int
            amdgpu_vm_init(struct amdgpu_device <br>
            >>>> *adev, struct amdgpu_vm *vm,<br>
            >>>>                vm->use_cpu_for_update ?
            "CPU" : "SDMA");<br>
            >>>>       WARN_ONCE((vm->use_cpu_for_update
            & <br>
            >>>> !amdgpu_vm_is_large_bar(adev)),<br>
            >>>>             "CPU update of VM recommended
            only for large BAR <br>
            >>>> system\n");<br>
            >>>> -    vm->last_dir_update = NULL;<br>
            >>>> +    vm->last_update = NULL;<br>
            >>>>         flags =
            AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |<br>
            >>>>              
            AMDGPU_GEM_CREATE_VRAM_CLEARED; @@ -2692,7 +2697,7 @@ <br>
            >>>> void amdgpu_vm_fini(struct amdgpu_device
            *adev, struct amdgpu_vm <br>
            >>>> *vm)<br>
            >>>>       }<br>
            >>>>        
            amdgpu_vm_free_levels(&vm->root);<br>
            >>>> -    dma_fence_put(vm->last_dir_update);<br>
            >>>> +    dma_fence_put(vm->last_update);<br>
            >>>>       for (i = 0; i < AMDGPU_MAX_VMHUBS;
            i++)<br>
            >>>>          
            amdgpu_vm_free_reserved_vmid(adev, vm, i);<br>
            >>>>   }<br>
            >>>> diff --git
            a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h<br>
            >>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h<br>
            >>>> index c1accd1..cb6a622 100644<br>
            >>>> ---
            a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h<br>
            >>>> +++
            b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h<br>
            >>>> @@ -140,7 +140,7 @@ struct amdgpu_vm {<br>
            >>>>         /* contains the page directory */<br>
            >>>>       struct amdgpu_vm_pt     root;<br>
            >>>> -    struct dma_fence    *last_dir_update;<br>
            >>>> +    struct dma_fence    *last_update;<br>
            >>>>         /* protecting freed */<br>
            >>>>       spinlock_t        freed_lock;<br>
            >>><br>
            >>> _______________________________________________<br>
            >>> amd-gfx mailing list<br>
            >>> <a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
            >>> <a
              href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx"
              moz-do-not-send="true">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><br>
            >><br>
            >><br>
            ><br>
            > _______________________________________________<br>
            > amd-gfx mailing list<br>
            > <a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
            > <a
              href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx"
              moz-do-not-send="true">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><br>
            <br>
            <br>
            _______________________________________________<br>
            amd-gfx mailing list<br>
            <a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a><br>
            <a
              href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx"
              moz-do-not-send="true">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><br>
          </div>
        </span></font>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
amd-gfx mailing list
<a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a>
</pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>