Count the number of requests in a ring for the user and show who
submitted them.

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 39 ++++++++++++++++++++++++-------------
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
b/drivers/gpu/drm/i915/i915_debugfs.c
index 9edc3f692256..6ff12ca147aa 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -671,31 +671,44 @@ static int i915_gem_request_info(struct seq_file *m, void 
*data)
        struct drm_device *dev = node->minor->dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_engine_cs *ring;
-       struct drm_i915_gem_request *gem_request;
-       int ret, count, i;
+       struct drm_i915_gem_request *rq;
+       int ret, any, i;
 
        ret = mutex_lock_interruptible(&dev->struct_mutex);
        if (ret)
                return ret;
 
-       count = 0;
+       any = 0;
        for_each_ring(ring, dev_priv, i) {
-               if (list_empty(&ring->request_list))
+               int count;
+
+               count = 0;
+               list_for_each_entry(rq, &ring->request_list, list)
+                       count++;
+               if (count == 0)
                        continue;
 
-               seq_printf(m, "%s requests:\n", ring->name);
-               list_for_each_entry(gem_request,
-                                   &ring->request_list,
-                                   list) {
-                       seq_printf(m, "    %x @ %d\n",
-                                  gem_request->seqno,
-                                  (int) (jiffies - 
gem_request->emitted_jiffies));
+               seq_printf(m, "%s requests: %d\n", ring->name, count);
+               list_for_each_entry(rq, &ring->request_list, list) {
+                       struct task_struct *task;
+
+                       rcu_read_lock();
+                       task = NULL;
+                       if (rq->pid)
+                               task = pid_task(rq->pid, PIDTYPE_PID);
+                       seq_printf(m, "    %x @ %d: %s [%d]\n",
+                                  rq->seqno,
+                                  (int) (jiffies - rq->emitted_jiffies),
+                                  task ? task->comm : "<unknown>",
+                                  task ? task->pid : -1);
+                       rcu_read_unlock();
                }
-               count++;
+
+               any++;
        }
        mutex_unlock(&dev->struct_mutex);
 
-       if (count == 0)
+       if (any == 0)
                seq_puts(m, "No requests\n");
 
        return 0;
-- 
2.1.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to