Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/xe/debugfs: Display gpuva info in debugfs
@ 2024-09-18 16:45 Oak Zeng
  2024-09-18 19:12 ` ✓ CI.Patch_applied: success for " Patchwork
                   ` (8 more replies)
  0 siblings, 9 replies; 15+ messages in thread
From: Oak Zeng @ 2024-09-18 16:45 UTC (permalink / raw)
  To: intel-xe

Add debugfs entry to display all the gpuva that is bound to the
device. This is done by walking all the VMs created for each device
process, and display va information of each VM. This is useful for
gpuvm debugging. With this change, user can display gpuva info
as below:

root@DUT7279PVC:/home/gta# cat /sys/kernel/debug/dri/0/gpuvas
Process "your process name" GPU VA space
DRM GPU VA space (Xe VM) [0x0000000000000000;0x0200000000000000]
Kernel reserved node [0x0000000000000000;0x0000000000000000]

 VAs | start              | range              | end                | object             | object offset
-------------------------------------------------------------------------------------------------------------
     | 0x0000000000000000 | 0x00007ffff5db7000 | 0x00007ffff5db7000 | 0x0000000000000000 | 0x0000000000000000
     | 0x00007ffff5db7000 | 0x0000000000001000 | 0x00007ffff5db8000 | 0x0000000000000000 | 0x00007ffff5db7000
     | 0x00007ffff5db8000 | 0x00ff80000a248000 | 0x0100000000000000 | 0x0000000000000000 | 0x0000000000000000

Signed-off-by: Oak Zeng <oak.zeng@intel.com>
---
 drivers/gpu/drm/xe/xe_debugfs.c | 44 +++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index 1011e5d281fa..0c7bee1c2a8d 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_debugfs.c
@@ -9,6 +9,7 @@
 #include <linux/string_helpers.h>
 
 #include <drm/drm_debugfs.h>
+#include <drm/drm_drv.h>
 
 #include "xe_bo.h"
 #include "xe_device.h"
@@ -84,9 +85,52 @@ static int sriov_info(struct seq_file *m, void *data)
 	return 0;
 }
 
+static int show_vm_gpuvas(struct xe_vm *vm, struct seq_file *m)
+{
+	int ret;
+
+	mutex_lock(&vm->snap_mutex);
+	ret = drm_debugfs_gpuva_info(m, &vm->gpuvm);
+	mutex_unlock(&vm->snap_mutex);
+
+	return ret;
+}
+
+static int show_each_vm(struct seq_file *m, void *arg)
+{
+	struct drm_info_node *node = (struct drm_info_node *)m->private;
+	struct xe_device *xe = node_to_xe(node);
+	struct drm_device *dev = &xe->drm;
+	struct drm_file *file;
+	struct xe_file *xef;
+	int (*show)(struct xe_vm *, struct seq_file *) = node->info_ent->data;
+	struct xe_vm *vm;
+	unsigned long idx;
+	int ret = 0;
+
+	mutex_lock(&dev->filelist_mutex);
+	list_for_each_entry(file, &dev->filelist, lhead) {
+		xef = (struct xe_file *)file->driver_priv;
+		seq_printf(m, "Process %s GPU VA space\n", xef->process_name);
+		mutex_lock(&xef->vm.lock);
+		xa_for_each(&xef->vm.xa, idx, vm) {
+			ret = show(vm, m);
+			if (ret < 0)
+				break;
+
+			seq_puts(m, "\n");
+		}
+		mutex_unlock(&xef->vm.lock);
+	}
+	mutex_unlock(&dev->filelist_mutex);
+
+	return ret;
+}
+
 static const struct drm_info_list debugfs_list[] = {
 	{"info", info, 0},
 	{ .name = "sriov_info", .show = sriov_info, },
+	DRM_DEBUGFS_GPUVA_INFO(show_each_vm, show_vm_gpuvas),
 };
 
 static int forcewake_open(struct inode *inode, struct file *file)
-- 
2.26.3


^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2024-09-20 20:47 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-18 16:45 [PATCH] drm/xe/debugfs: Display gpuva info in debugfs Oak Zeng
2024-09-18 19:12 ` ✓ CI.Patch_applied: success for " Patchwork
2024-09-18 19:13 ` ✗ CI.checkpatch: warning " Patchwork
2024-09-18 19:14 ` ✓ CI.KUnit: success " Patchwork
2024-09-18 19:26 ` ✓ CI.Build: " Patchwork
2024-09-18 19:28 ` ✓ CI.Hooks: " Patchwork
2024-09-18 19:30 ` ✓ CI.checksparse: " Patchwork
2024-09-18 19:58 ` ✓ CI.BAT: " Patchwork
2024-09-19  7:31 ` ✗ CI.FULL: failure " Patchwork
2024-09-19 19:01 ` [PATCH] " Matthew Brost
2024-09-19 19:04   ` Matthew Brost
2024-09-20 15:57   ` Zeng, Oak
2024-09-20 18:43     ` Matthew Brost
2024-09-20 20:03       ` Zeng, Oak
2024-09-20 20:45         ` Matthew Brost

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox