Re: [Intel-gfx] [PATCH 12/13 v4] drm/i915: Debugfs interface for GuC submission statistics
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
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