[Intel-gfx] [RFC 1/2] drm/i915: Export active PPGTTs in debugfs

rafael.barbalho at intel.com rafael.barbalho at intel.com
Thu Feb 12 12:05:01 PST 2015


From: Rafael Barbalho <rafael.barbalho at intel.com>

It's possible to gather up basic information on all active VMs.

Signed-off-by: Rafael Barbalho <rafael.barbalho at intel.com>
Cc: Daniel Vetter <daniel at ffwll.ch>
Cc: Jon Bloomfield <jon.bloomfield at intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 41 +++++++++++++++++++++++++------------
 1 file changed, 28 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 1467cc1..0bf10c0 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -125,7 +125,7 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
 	struct i915_vma *vma;
 	int pin_count = 0;
 
-	seq_printf(m, "%pK: %s%s%s %8zdKiB %02x %02x %u %u %u%s%s%s",
+	seq_printf(m, "%p: %s%s%s %8zdKiB %02x %02x %u %u %u%s%s%s",
 		   &obj->base,
 		   get_pin_flag(obj),
 		   get_tiling_flag(obj),
@@ -2013,22 +2013,37 @@ static void gen8_ppgtt_info(struct seq_file *m, struct drm_device *dev)
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	struct intel_engine_cs *ring;
 	struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
+	struct i915_address_space *vm;
 	int unused, i;
 
-	if (!ppgtt)
-		return;
 
-	seq_printf(m, "Page directories: %d\n", ppgtt->num_pd_pages);
-	seq_printf(m, "Page tables: %d\n", ppgtt->num_pd_entries);
-	for_each_ring(ring, dev_priv, unused) {
-		seq_printf(m, "%s\n", ring->name);
-		for (i = 0; i < 4; i++) {
-			u32 offset = 0x270 + i * 8;
-			u64 pdp = I915_READ(ring->mmio_base + offset + 4);
-			pdp <<= 32;
-			pdp |= I915_READ(ring->mmio_base + offset);
-			seq_printf(m, "\tPDP%d 0x%016llx\n", i, pdp);
+	if (ppgtt) {
+		seq_printf(m, "Page directories: %d\n", ppgtt->num_pd_pages);
+		seq_printf(m, "Page tables: %d\n", ppgtt->num_pd_entries);
+		for_each_ring(ring, dev_priv, unused) {
+			seq_printf(m, "%s\n", ring->name);
+			for (i = 0; i < 4; i++) {
+				u32 offset = 0x270 + i * 8;
+				u64 pdp = I915_READ(ring->mmio_base + offset + 4);
+				pdp <<= 32;
+				pdp |= I915_READ(ring->mmio_base + offset);
+				seq_printf(m, "\tPDP%d 0x%016llx\n", i, pdp);
+			}
+		}
+	} else {
+		i = 0;
+		list_for_each_entry(vm, &dev_priv->vm_list, global_link) {
+			if (i915_is_ggtt(vm))
+				continue;
+			i++;
+			ppgtt = i915_vm_to_ppgtt(vm);
+			seq_printf(m, "PPGTT %p - references\n", ppgtt);
+			seq_printf(m, "Page directories: %d\n",
+							ppgtt->num_pd_pages);
+			seq_printf(m, "Page tables: %d\n",
+							ppgtt->num_pd_entries);
 		}
+		seq_printf(m, "Number of PPGTTs active: %d\n", i);
 	}
 }
 
-- 
2.3.0



More information about the Intel-gfx mailing list