<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    Am 06.11.24 um 18:00 schrieb Matthew Brost:<br>
    <blockquote type="cite" cite="mid:ZyugmXt7v+JeKuN9@lstrano-desk.jf.intel.com">[SNIP]<span style="white-space: pre-wrap">
</span>
      <pre class="moz-quote-pre" wrap="">
This is not a generic interface that anyone can freely access. The same
permissions used by ptrace are checked when opening such an interface.
See [1] [2].

[1] <a class="moz-txt-link-freetext" href="https://patchwork.freedesktop.org/patch/617470/?series=136572&rev=2">https://patchwork.freedesktop.org/patch/617470/?series=136572&rev=2</a>
[2] <a class="moz-txt-link-freetext" href="https://patchwork.freedesktop.org/patch/617471/?series=136572&rev=2">https://patchwork.freedesktop.org/patch/617471/?series=136572&rev=2</a></pre>
    </blockquote>
    <br>
    Thanks a lot for those pointers, that is exactly what I was looking
    for.<br>
    <br>
    And yeah, it is what I feared. You are re-implementing existing
    functionality, but see below.<br>
    <br>
    <span style="white-space: pre-wrap">
</span>
    <blockquote type="cite" cite="mid:ZyugmXt7v+JeKuN9@lstrano-desk.jf.intel.com">
      <blockquote type="cite">
        <blockquote type="cite">
          <pre class="moz-quote-pre" wrap="">kmap/vmap are used everywhere in the DRM subsystem to access BOs, so I’m
failing to see the problem with adding a simple helper based on existing
code.
</pre>
        </blockquote>
        <pre class="moz-quote-pre" wrap="">
What#s possible and often done is to do kmap/vmap if you need to implement a
CPU copy for scanout for example or for copying/validating command buffers.
But that usually requires accessing the whole BO and has separate security
checks.

When you want to access only a few bytes of a BO that sounds massively like
a peek/poke like interface and we have already rejected that more than once.
There even used to be standardized GEM IOCTLs for that which have been
removed by now.

If you need to access BOs which are placed in not CPU accessible memory then
implement the access callback for ptrace, see amdgpu_ttm_access_memory for
an example how to do this.

</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
Ptrace access via vm_operations_struct.access → ttm_bo_vm_access.

This series renames ttm_bo_vm_access to ttm_bo_access, with no code changes.

The above function accesses a BO via kmap if it is in SYSTEM / TT,
which is existing code.

This function is only exposed to user space via ptrace permissions.</pre>
    </blockquote>
    <blockquote type="cite" cite="mid:ZyugmXt7v+JeKuN9@lstrano-desk.jf.intel.com">
      <pre class="moz-quote-pre" wrap="">In this series, we implement a function [3] similar to
amdgpu_ttm_access_memory for the TTM vfunc access_memory. What is
missing is non-visible CPU memory access, similar to
amdgpu_ttm_access_memory_sdma. This will be addressed in a follow-up and
was omitted in this series given its complexity.

So, this looks more or less identical to AMD's ptrace implementation,
but in GPU address space. Again, I fail to see what the problem is here.
What am I missing?</pre>
    </blockquote>
    <br>
    The main question is why can't you use the existing interfaces
    directly?<br>
    <br>
    Additional to the peek/poke interface of ptrace Linux has the
    pidfd_getfd system call, see here
    <a class="moz-txt-link-freetext" href="https://man7.org/linux/man-pages/man2/pidfd_getfd.2.html">https://man7.org/linux/man-pages/man2/pidfd_getfd.2.html</a>.<br>
    <br>
    The pidfd_getfd() allows to dup() the render node file descriptor
    into your gdb process. That in turn gives you all the access you
    need from gdb, including mapping BOs and command submission on
    behalf of the application.<br>
    <br>
    As far as I can see that allows for the same functionality as the
    eudebug interface, just without any driver specific code messing
    with ptrace permissions and peek/poke interfaces.<br>
    <br>
    So the question is still why do you need the whole eudebug interface
    in the first place? I might be missing something, but that seems to
    be superfluous from a high level view.<br>
    <br>
    It's true that the AMD KFD part has still similar functionality, but
    that is because of the broken KFD design of tying driver state to
    the CPU process (which makes it inaccessible for gdb even with
    imported render node fd).<br>
    <br>
    Both Sima and I (and partially Dave as well) have pushed back on the
    KFD approach. And the long term plan is to get rid of such device
    driver specific interface which re-implement existing functionality
    just differently. <br>
    <br>
    So you need to have a really really good explanation why the eudebug
    interface is actually necessary.<br>
    <br>
    Regards,<br>
    Christian.<br>
    <br>
    <blockquote type="cite" cite="mid:ZyugmXt7v+JeKuN9@lstrano-desk.jf.intel.com">
      <pre class="moz-quote-pre" wrap="">

Matt

[3] <a class="moz-txt-link-freetext" href="https://patchwork.freedesktop.org/patch/622520/?series=140200&rev=6">https://patchwork.freedesktop.org/patch/622520/?series=140200&rev=6</a>

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">Regards,
Christian.

</pre>
        <blockquote type="cite">
          <pre class="moz-quote-pre" wrap="">
Matt

</pre>
          <blockquote type="cite">
            <pre class="moz-quote-pre" wrap="">Regards,
Christian.
</pre>
          </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
  </body>
</html>