[Intel-gfx] [RFC 4/6] drm: Add simple fdinfo memory helpers
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Mon Apr 17 15:56:11 UTC 2023
From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
For drivers who only wish to show one memory region called 'system,
and only account the GEM buffer object handles under it.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
---
drivers/gpu/drm/drm_file.c | 45 ++++++++++++++++++++++++++++++++++++++
include/drm/drm_file.h | 6 +++++
2 files changed, 51 insertions(+)
diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
index e202f79e816d..1e70669dddf7 100644
--- a/drivers/gpu/drm/drm_file.c
+++ b/drivers/gpu/drm/drm_file.c
@@ -872,6 +872,51 @@ void drm_send_event(struct drm_device *dev, struct drm_pending_event *e)
}
EXPORT_SYMBOL(drm_send_event);
+static void
+add_obj(struct drm_gem_object *obj, struct drm_fdinfo_memory_stat *stats)
+{
+ u64 sz = obj->size;
+
+ stats[0].size += sz;
+
+ if (obj->handle_count > 1)
+ stats[0].shared += sz;
+
+ if (!dma_resv_test_signaled(obj->resv, dma_resv_usage_rw(true)))
+ stats[0].active += sz;
+
+ /* Not supported. */
+ stats[0].resident = ~0ull;
+ stats[0].purgeable = ~0ull;
+}
+
+char **
+drm_query_fdinfo_system_region(struct drm_device *dev, unsigned int *num)
+{
+ static char *region[] = {
+ "system",
+ };
+
+ *num = 1;
+
+ return region;
+}
+EXPORT_SYMBOL(drm_query_fdinfo_system_region);
+
+void
+drm_query_fdinfo_system_memory(struct drm_file *file,
+ struct drm_fdinfo_memory_stat *stats)
+{
+ struct drm_gem_object *obj;
+ int id;
+
+ spin_lock(&file->table_lock);
+ idr_for_each_entry(&file->object_idr, obj, id)
+ add_obj(obj, stats);
+ spin_unlock(&file->table_lock);
+}
+EXPORT_SYMBOL(drm_query_fdinfo_system_memory);
+
static void
print_stat(struct drm_printer *p, const char *stat, const char *region, u64 sz)
{
diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h
index 00d48beeac5c..dd7c6fb2c975 100644
--- a/include/drm/drm_file.h
+++ b/include/drm/drm_file.h
@@ -383,6 +383,12 @@ struct drm_fdinfo_memory_stat {
u64 active;
};
+char **drm_query_fdinfo_system_region(struct drm_device *dev,
+ unsigned int *num);
+void drm_query_fdinfo_system_memory(struct drm_file *file,
+ struct drm_fdinfo_memory_stat *stats);
+
+
/**
* drm_is_primary_client - is this an open file of the primary node
* @file_priv: DRM file
--
2.37.2
More information about the Intel-gfx
mailing list