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 <mcanal@xxxxxxxxxx> --- * 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 = { -- 2.45.2