<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Well that's not so easy of hand.<br>
      <br>
      The basic problem here is that when you busy wait at this place
      you can easily run into situations where application A busy waits
      for B while B busy waits for A -> deadlock.<br>
      <br>
      So what we need here is the deadlock detection logic of the
      ww_mutex. To use this we at least need to do the following steps:<br>
      <br>
      1. Reserve the BO in DC using a ww_mutex ticket (trivial).<br>
      <br>
      2. If we then run into this EBUSY condition in TTM check if the BO
      we need memory for (or rather the ww_mutex of its reservation
      object) has a ticket assigned.<br>
      <br>
      3. If we have a ticket we grab a reference to the first BO on the
      LRU, drop the LRU lock and try to grab the reservation lock with
      the ticket.<br>
      <br>
      4. If getting the reservation lock with the ticket succeeded we
      check if the BO is still the first one on the LRU in question (the
      BO could have moved).<br>
      <br>
      5. If the BO is still the first one on the LRU in question we try
      to evict it as we would evict any other BO.<br>
      <br>
      6. If any of the "If's" above fail we just back off and return
      -EBUSY.<br>
      <br>
      Steps 2-5 are certainly not trivial, but doable as far as I can
      see.<br>
      <br>
      Have fun :)<br>
      Christian.<br>
      <br>
      Am 23.04.19 um 15:19 schrieb Zhou, David(ChunMing):<br>
    </div>
    <blockquote type="cite"
cite="mid:ven3p5-dcjsua-aovhkzqonovm1ermvl-iasad2-grfh83xntt6k-qnptbs-6ko55nfhu2ac-rew2lw-zbd8fsix6bv3-dlzat2-8w1c4brcif8r7131wn-p5wdqd-fvtllbv000vq-jszyw5-f3mv7ivocjk.1556025578377@email.android.com">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <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>How about adding more condition ctx->resv inline to
        address your concern? As well as don't wait from same user,
        shouldn't lead to deadlock.<br>
        <br>
        Otherwise, any other idea?<br>
        <br>
        -------- Original Message --------<br>
        Subject: Re: [PATCH] ttm: wait mem space if user allow while gpu
        busy<br>
        From: Christian König <br>
        To: "Liang, Prike" ,"Zhou, David(ChunMing)"
        ,<a class="moz-txt-link-abbreviated" href="mailto:dri-devel@lists.freedesktop.org">dri-devel@lists.freedesktop.org</a><br>
        CC: <br>
        <br>
      </div>
      <font size="2"><span style="font-size:11pt;">
          <div class="PlainText">Well that is certainly a NAK because it
            can lead to deadlock in the
            <br>
            memory management.<br>
            <br>
            You can't just busy wait with all those locks held.<br>
            <br>
            Regards,<br>
            Christian.<br>
            <br>
            Am 23.04.19 um 03:45 schrieb Liang, Prike:<br>
            > Acked-by: Prike Liang <a class="moz-txt-link-rfc2396E" href="mailto:Prike.Liang@amd.com"><Prike.Liang@amd.com></a><br>
            ><br>
            > Thanks,<br>
            > Prike<br>
            > -----Original Message-----<br>
            > From: Chunming Zhou <a class="moz-txt-link-rfc2396E" href="mailto:david1.zhou@amd.com"><david1.zhou@amd.com></a><br>
            > Sent: Monday, April 22, 2019 6:39 PM<br>
            > To: <a class="moz-txt-link-abbreviated" href="mailto:dri-devel@lists.freedesktop.org">dri-devel@lists.freedesktop.org</a><br>
            > Cc: Liang, Prike <a class="moz-txt-link-rfc2396E" href="mailto:Prike.Liang@amd.com"><Prike.Liang@amd.com></a>; Zhou,
            David(ChunMing) <a class="moz-txt-link-rfc2396E" href="mailto:David1.Zhou@amd.com"><David1.Zhou@amd.com></a><br>
            > Subject: [PATCH] ttm: wait mem space if user allow
            while gpu busy<br>
            ><br>
            > heavy gpu job could occupy memory long time, which
            could lead to other user fail to get memory.<br>
            ><br>
            > Change-Id: I0b322d98cd76e5ac32b00462bbae8008d76c5e11<br>
            > Signed-off-by: Chunming Zhou
            <a class="moz-txt-link-rfc2396E" href="mailto:david1.zhou@amd.com"><david1.zhou@amd.com></a><br>
            > ---<br>
            >   drivers/gpu/drm/ttm/ttm_bo.c | 6 ++++--<br>
            >   1 file changed, 4 insertions(+), 2 deletions(-)<br>
            ><br>
            > diff --git a/drivers/gpu/drm/ttm/ttm_bo.c
            b/drivers/gpu/drm/ttm/ttm_bo.c index
            7c484729f9b2..6c596cc24bec 100644<br>
            > --- a/drivers/gpu/drm/ttm/ttm_bo.c<br>
            > +++ b/drivers/gpu/drm/ttm/ttm_bo.c<br>
            > @@ -830,8 +830,10 @@ static int
            ttm_bo_mem_force_space(struct ttm_buffer_object *bo,<br>
            >                if (mem->mm_node)<br>
            >                        break;<br>
            >                ret = ttm_mem_evict_first(bdev,
            mem_type, place, ctx);<br>
            > -             if (unlikely(ret != 0))<br>
            > -                     return ret;<br>
            > +             if (unlikely(ret != 0)) {<br>
            > +                     if (!ctx || ctx->no_wait_gpu
            || ret != -EBUSY)<br>
            > +                             return ret;<br>
            > +             }<br>
            >        } while (1);<br>
            >        mem->mem_type = mem_type;<br>
            >        return ttm_bo_add_move_fence(bo, man, mem);<br>
            > --<br>
            > 2.17.1<br>
            ><br>
            > _______________________________________________<br>
            > dri-devel mailing list<br>
            > <a class="moz-txt-link-abbreviated" href="mailto:dri-devel@lists.freedesktop.org">dri-devel@lists.freedesktop.org</a><br>
            > <a
              href="https://lists.freedesktop.org/mailman/listinfo/dri-devel"
              moz-do-not-send="true">https://lists.freedesktop.org/mailman/listinfo/dri-devel</a><br>
            <br>
          </div>
        </span></font>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
dri-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:dri-devel@lists.freedesktop.org">dri-devel@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="https://lists.freedesktop.org/mailman/listinfo/dri-devel">https://lists.freedesktop.org/mailman/listinfo/dri-devel</a></pre>
    </blockquote>
    <br>
  </body>
</html>