On 7/11/24 11:25, Maíra Canal wrote:
Use the common DRM function `drm_show_memory_stats()` to expose standard
fdinfo memory stats.

V3D exposes global GPU memory stats through debugfs. Those stats will be
preserved while the DRM subsystem doesn't have a standard solution to
expose global GPU stats.

Signed-off-by: Maíra Canal <mca...@igalia.com>

Applied to drm-misc/drm-misc-next!

Best Regards,
- Maíra

---

* Example fdinfo output:

$ cat /proc/10100/fdinfo/19
pos:    0
flags:  02400002
mnt_id: 25
ino:    521
drm-driver:     v3d
drm-client-id:  81
drm-engine-bin:         4916187 ns
v3d-jobs-bin:   98 jobs
drm-engine-render:      154563573 ns
v3d-jobs-render:        98 jobs
drm-engine-tfu:         10574 ns
v3d-jobs-tfu:   1 jobs
drm-engine-csd:         0 ns
v3d-jobs-csd:   0 jobs
drm-engine-cache_clean:         0 ns
v3d-jobs-cache_clean:   0 jobs
drm-engine-cpu:         0 ns
v3d-jobs-cpu:   0 jobs
drm-total-memory:       15168 KiB
drm-shared-memory:      9336 KiB
drm-active-memory:      0

* Example gputop output:

DRM minor 128
   PID      MEM      RSS       bin          render           tfu            csd 
       cache_clean        cpu       NAME
10257      19M      19M |  3.6% ▎     || 43.2% ██▋   ||  0.0%       ||  0.0%    
   ||  0.0%       ||  0.0%       | glmark2
  9963       3M       3M |  0.3% ▏     ||  2.6% ▎     ||  0.0%       ||  0.0%   
    ||  0.0%       ||  0.0%       | glxgears
  9965      10M      10M |  0.0%       ||  0.0%       ||  0.0%       ||  0.0%   
    ||  0.0%       ||  0.0%       | Xwayland
10100      14M      14M |  0.0%       ||  0.0%       ||  0.0%       ||  0.0%    
   ||  0.0%       ||  0.0%       | chromium-browse

Best Regards,
- Maíra

  drivers/gpu/drm/v3d/v3d_bo.c  | 12 ++++++++++++
  drivers/gpu/drm/v3d/v3d_drv.c |  2 ++
  2 files changed, 14 insertions(+)

diff --git a/drivers/gpu/drm/v3d/v3d_bo.c b/drivers/gpu/drm/v3d/v3d_bo.c
index a165cbcdd27b..ecb80fd75b1a 100644
--- a/drivers/gpu/drm/v3d/v3d_bo.c
+++ b/drivers/gpu/drm/v3d/v3d_bo.c
@@ -26,6 +26,17 @@
  #include "v3d_drv.h"
  #include "uapi/drm/v3d_drm.h"
+static enum drm_gem_object_status v3d_gem_status(struct drm_gem_object *obj)
+{
+       struct v3d_bo *bo = to_v3d_bo(obj);
+       enum drm_gem_object_status res = 0;
+
+       if (bo->base.pages)
+               res |= DRM_GEM_OBJECT_RESIDENT;
+
+       return res;
+}
+
  /* Called DRM core on the last userspace/kernel unreference of the
   * BO.
   */
@@ -63,6 +74,7 @@ static const struct drm_gem_object_funcs v3d_gem_funcs = {
        .vmap = drm_gem_shmem_object_vmap,
        .vunmap = drm_gem_shmem_object_vunmap,
        .mmap = drm_gem_shmem_object_mmap,
+       .status = v3d_gem_status,
        .vm_ops = &drm_gem_shmem_vm_ops,
  };
diff --git a/drivers/gpu/drm/v3d/v3d_drv.c b/drivers/gpu/drm/v3d/v3d_drv.c
index a47f00b443d3..e883f405f26a 100644
--- a/drivers/gpu/drm/v3d/v3d_drv.c
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
@@ -184,6 +184,8 @@ static void v3d_show_fdinfo(struct drm_printer *p, struct 
drm_file *file)
                drm_printf(p, "v3d-jobs-%s: \t%llu jobs\n",
                           v3d_queue_to_string(queue), jobs_completed);
        }
+
+       drm_show_memory_stats(p, file);
  }
static const struct file_operations v3d_drm_fops = {

Reply via email to