Re: [Intel-gfx] [PATCH 12/13 v4] drm/i915: Debugfs interface for GuC submission statistics

2015-07-27 Thread O'Rourke, Tom
On Thu, Jul 09, 2015 at 07:29:13PM +0100, Dave Gordon wrote:
 This provides a means of reading status and counts relating
 to GuC actions and submissions.
 
 v2:
 Remove surplus blank line in output [Chris Wilson]
 
 v4:
 Rebased
 
 Signed-off-by: Dave Gordon david.s.gor...@intel.com
 Signed-off-by: Alex Dai yu@intel.com
 ---
Reviewed-by: Tom O'Rourke Tom.O'rou...@intel.com
  drivers/gpu/drm/i915/i915_debugfs.c | 40 
 +
  1 file changed, 40 insertions(+)
 
 diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
 b/drivers/gpu/drm/i915/i915_debugfs.c
 index d93732a..cebb93c 100644
 --- a/drivers/gpu/drm/i915/i915_debugfs.c
 +++ b/drivers/gpu/drm/i915/i915_debugfs.c
 @@ -2397,6 +2397,45 @@ static int i915_guc_load_status_info(struct seq_file 
 *m, void *data)
   return 0;
  }
  
 +static int i915_guc_info(struct seq_file *m, void *data)
 +{
 + struct drm_info_node *node = m-private;
 + struct drm_device *dev = node-minor-dev;
 + struct drm_i915_private *dev_priv = dev-dev_private;
 + struct intel_guc guc;
 + struct i915_guc_client client = { .client_obj = 0 };
 +
 + if (!HAS_GUC_SCHED(dev_priv-dev))
 + return 0;
 +
 + /* Take a local copy of the GuC data, so we can dump it at leisure */
 + spin_lock(dev_priv-guc.host2guc_lock);
 + guc = dev_priv-guc;
 + if (guc.execbuf_client) {
 + spin_lock(guc.execbuf_client-wq_lock);
 + client = *guc.execbuf_client;
 + spin_unlock(guc.execbuf_client-wq_lock);
 + }
 + spin_unlock(dev_priv-guc.host2guc_lock);
 +
 + seq_printf(m, GuC total action count: %llu\n, guc.action_count);
 + seq_printf(m, GuC last action command: 0x%x\n, guc.action_cmd);
 + seq_printf(m, GuC last action status: 0x%x\n, guc.action_status);
 +
 + seq_printf(m, GuC action failure count: %u\n, guc.action_fail);
 + seq_printf(m, GuC last action error code: %d\n, guc.action_err);
 +
 + seq_printf(m, \nGuC execbuf client @ %p:\n, guc.execbuf_client);
 + seq_printf(m, \tTotal submissions: %llu\n, client.submissions);
 + seq_printf(m, \tFailed to queue: %u\n, client.q_fail);
 + seq_printf(m, \tFailed doorbell: %u\n, client.b_fail);
 + seq_printf(m, \tLast submission result: %d\n, client.retcode);
 +
 + /* Add more as required ... */
 +
 + return 0;
 +}
 +
  static int i915_guc_log_dump(struct seq_file *m, void *data)
  {
   struct drm_info_node *node = m-private;
 @@ -5139,6 +5178,7 @@ static const struct drm_info_list i915_debugfs_list[] = 
 {
   {i915_gem_hws_bsd, i915_hws_info, 0, (void *)VCS},
   {i915_gem_hws_vebox, i915_hws_info, 0, (void *)VECS},
   {i915_gem_batch_pool, i915_gem_batch_pool_info, 0},
 + {i915_guc_info, i915_guc_info, 0},
   {i915_guc_load_status, i915_guc_load_status_info, 0},
   {i915_guc_log_dump, i915_guc_log_dump, 0},
   {i915_frequency_info, i915_frequency_info, 0},
 -- 
 1.9.1
 
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH 12/13 v4] drm/i915: Debugfs interface for GuC submission statistics

2015-07-09 Thread Dave Gordon
This provides a means of reading status and counts relating
to GuC actions and submissions.

v2:
Remove surplus blank line in output [Chris Wilson]

v4:
Rebased

Signed-off-by: Dave Gordon david.s.gor...@intel.com
Signed-off-by: Alex Dai yu@intel.com
---
 drivers/gpu/drm/i915/i915_debugfs.c | 40 +
 1 file changed, 40 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
b/drivers/gpu/drm/i915/i915_debugfs.c
index d93732a..cebb93c 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2397,6 +2397,45 @@ static int i915_guc_load_status_info(struct seq_file *m, 
void *data)
return 0;
 }
 
+static int i915_guc_info(struct seq_file *m, void *data)
+{
+   struct drm_info_node *node = m-private;
+   struct drm_device *dev = node-minor-dev;
+   struct drm_i915_private *dev_priv = dev-dev_private;
+   struct intel_guc guc;
+   struct i915_guc_client client = { .client_obj = 0 };
+
+   if (!HAS_GUC_SCHED(dev_priv-dev))
+   return 0;
+
+   /* Take a local copy of the GuC data, so we can dump it at leisure */
+   spin_lock(dev_priv-guc.host2guc_lock);
+   guc = dev_priv-guc;
+   if (guc.execbuf_client) {
+   spin_lock(guc.execbuf_client-wq_lock);
+   client = *guc.execbuf_client;
+   spin_unlock(guc.execbuf_client-wq_lock);
+   }
+   spin_unlock(dev_priv-guc.host2guc_lock);
+
+   seq_printf(m, GuC total action count: %llu\n, guc.action_count);
+   seq_printf(m, GuC last action command: 0x%x\n, guc.action_cmd);
+   seq_printf(m, GuC last action status: 0x%x\n, guc.action_status);
+
+   seq_printf(m, GuC action failure count: %u\n, guc.action_fail);
+   seq_printf(m, GuC last action error code: %d\n, guc.action_err);
+
+   seq_printf(m, \nGuC execbuf client @ %p:\n, guc.execbuf_client);
+   seq_printf(m, \tTotal submissions: %llu\n, client.submissions);
+   seq_printf(m, \tFailed to queue: %u\n, client.q_fail);
+   seq_printf(m, \tFailed doorbell: %u\n, client.b_fail);
+   seq_printf(m, \tLast submission result: %d\n, client.retcode);
+
+   /* Add more as required ... */
+
+   return 0;
+}
+
 static int i915_guc_log_dump(struct seq_file *m, void *data)
 {
struct drm_info_node *node = m-private;
@@ -5139,6 +5178,7 @@ static const struct drm_info_list i915_debugfs_list[] = {
{i915_gem_hws_bsd, i915_hws_info, 0, (void *)VCS},
{i915_gem_hws_vebox, i915_hws_info, 0, (void *)VECS},
{i915_gem_batch_pool, i915_gem_batch_pool_info, 0},
+   {i915_guc_info, i915_guc_info, 0},
{i915_guc_load_status, i915_guc_load_status_info, 0},
{i915_guc_log_dump, i915_guc_log_dump, 0},
{i915_frequency_info, i915_frequency_info, 0},
-- 
1.9.1

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