[Intel-gfx] [PATCH] drm/i915: print full error ring semaphore mboxes and sync.
With the increasing number of rings, we probably have more information to print than we were printing. Cc: Ben Widawsky benjamin.widaw...@intel.com Signed-off-by: Rodrigo Vivi rodrigo.v...@intel.com --- drivers/gpu/drm/i915/i915_gpu_error.c | 18 ++ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c index 36a7960..0beeebf 100644 --- a/drivers/gpu/drm/i915/i915_gpu_error.c +++ b/drivers/gpu/drm/i915/i915_gpu_error.c @@ -242,6 +242,8 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m, struct drm_device *dev, struct drm_i915_error_ring *ring) { + int i; + if (!ring-valid) return; @@ -264,23 +266,15 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m, if (INTEL_INFO(dev)-gen = 6) { err_printf(m, RC PSMI: 0x%08x\n, ring-rc_psmi); err_printf(m, FAULT_REG: 0x%08x\n, ring-fault_reg); - err_printf(m, SYNC_0: 0x%08x [last synced 0x%08x]\n, - ring-semaphore_mboxes[0], - ring-semaphore_seqno[0]); - err_printf(m, SYNC_1: 0x%08x [last synced 0x%08x]\n, - ring-semaphore_mboxes[1], - ring-semaphore_seqno[1]); - if (HAS_VEBOX(dev)) { - err_printf(m, SYNC_2: 0x%08x [last synced 0x%08x]\n, - ring-semaphore_mboxes[2], - ring-semaphore_seqno[2]); + for (i = 0; i I915_NUM_RINGS - 1; i++) { + err_printf(m, SYNC_%d: 0x%08x [last synced 0x%08x]\n, + i, ring-semaphore_mboxes[i], + ring-semaphore_seqno[i]); } } if (USES_PPGTT(dev)) { err_printf(m, GFX_MODE: 0x%08x\n, ring-vm_info.gfx_mode); - if (INTEL_INFO(dev)-gen = 8) { - int i; for (i = 0; i 4; i++) err_printf(m, PDP%d: 0x%016llx\n, i, ring-vm_info.pdp[i]); -- 1.9.3 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] drm/i915: print full error ring semaphore mboxes and sync.
On Thu, Jul 17, 2014 at 09:39:55AM -0700, Rodrigo Vivi wrote: With the increasing number of rings, we probably have more information to print than we were printing. After our discussion were you going to send a new patch? [snip] -- Ben Widawsky, Intel Open Source Technology Center ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] drm/i915: print full error ring semaphore mboxes and sync.
You mean you prefer the the loop with for (i = 0; i hweight(ring_mask); i++) { instead? I thought you were ok with either and I preferred this one just to be on the safest side and let userspace parse it properly. Or do you prefer that other version with double loop but with names of rings? Thanks, Rodrigo. -Original Message- From: Widawsky, Benjamin Sent: Thursday, July 17, 2014 5:23 PM To: Vivi, Rodrigo Cc: intel-gfx@lists.freedesktop.org Subject: Re: [PATCH] drm/i915: print full error ring semaphore mboxes and sync. On Thu, Jul 17, 2014 at 09:39:55AM -0700, Rodrigo Vivi wrote: With the increasing number of rings, we probably have more information to print than we were printing. After our discussion were you going to send a new patch? [snip] -- Ben Widawsky, Intel Open Source Technology Center ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] drm/i915: print full error ring semaphore mboxes and sync.
On Thu, Jul 17, 2014 at 05:36:52PM -0700, Vivi, Rodrigo wrote: You mean you prefer the the loop with for (i = 0; i hweight(ring_mask); i++) { instead? I thought you were ok with either and I preferred this one just to be on the safest side and let userspace parse it properly. I can live with either. I guess it's a little more obvious if we only capture the relevant data on platforms that have actual registers. gen8 is special IMO here because we're writing to memory. But either way this is an improvement. Or do you prefer that other version with double loop but with names of rings? I think it would be cool if we could have it as such, but I am not sure what others think: SYNC[RCS-VCS]: 0x%08x But whatever. Anyway, I was just asking because I wasn't sure if I should wait for another patch. Thanks, Rodrigo. -Original Message- From: Widawsky, Benjamin Sent: Thursday, July 17, 2014 5:23 PM To: Vivi, Rodrigo Cc: intel-gfx@lists.freedesktop.org Subject: Re: [PATCH] drm/i915: print full error ring semaphore mboxes and sync. On Thu, Jul 17, 2014 at 09:39:55AM -0700, Rodrigo Vivi wrote: With the increasing number of rings, we probably have more information to print than we were printing. After our discussion were you going to send a new patch? [snip] -- Ben Widawsky, Intel Open Source Technology Center -- Ben Widawsky, Intel Open Source Technology Center ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
[Intel-gfx] [PATCH] drm/i915: print full error ring semaphore mboxes and sync.
With the increasing number of rings, we probably have more information to print than we were printing. v2: Loop only over active rings and print info with ring names. Cc: Ben Widawsky benjamin.widaw...@intel.com Signed-off-by: Rodrigo Vivi rodrigo.v...@intel.com --- drivers/gpu/drm/i915/i915_gpu_error.c | 24 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c index 36a7960..b1848e0 100644 --- a/drivers/gpu/drm/i915/i915_gpu_error.c +++ b/drivers/gpu/drm/i915/i915_gpu_error.c @@ -242,6 +242,10 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m, struct drm_device *dev, struct drm_i915_error_ring *ring) { + struct drm_i915_private *dev_priv = dev-dev_private; + struct intel_engine_cs *from, *to; + int i, j; + if (!ring-valid) return; @@ -264,23 +268,19 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m, if (INTEL_INFO(dev)-gen = 6) { err_printf(m, RC PSMI: 0x%08x\n, ring-rc_psmi); err_printf(m, FAULT_REG: 0x%08x\n, ring-fault_reg); - err_printf(m, SYNC_0: 0x%08x [last synced 0x%08x]\n, - ring-semaphore_mboxes[0], - ring-semaphore_seqno[0]); - err_printf(m, SYNC_1: 0x%08x [last synced 0x%08x]\n, - ring-semaphore_mboxes[1], - ring-semaphore_seqno[1]); - if (HAS_VEBOX(dev)) { - err_printf(m, SYNC_2: 0x%08x [last synced 0x%08x]\n, - ring-semaphore_mboxes[2], - ring-semaphore_seqno[2]); + for_each_ring(from, dev_priv, i) { + for_each_ring(to, dev_priv, j) { + int idx = intel_ring_sync_index(from, to); + err_printf(m, SYNC[%s - %s]: 0x%08x [last synced 0x%08x]\n, + from-name, to-name, + ring-semaphore_mboxes[idx], + ring-semaphore_seqno[idx]); + } } } if (USES_PPGTT(dev)) { err_printf(m, GFX_MODE: 0x%08x\n, ring-vm_info.gfx_mode); - if (INTEL_INFO(dev)-gen = 8) { - int i; for (i = 0; i 4; i++) err_printf(m, PDP%d: 0x%016llx\n, i, ring-vm_info.pdp[i]); -- 1.9.3 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] drm/i915: print full error ring semaphore mboxes and sync.
On Thu, Jul 17, 2014 at 10:58:17AM -0700, Rodrigo Vivi wrote: With the increasing number of rings, we probably have more information to print than we were printing. v2: Loop only over active rings and print info with ring names. Cc: Ben Widawsky benjamin.widaw...@intel.com Signed-off-by: Rodrigo Vivi rodrigo.v...@intel.com --- drivers/gpu/drm/i915/i915_gpu_error.c | 24 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c index 36a7960..b1848e0 100644 --- a/drivers/gpu/drm/i915/i915_gpu_error.c +++ b/drivers/gpu/drm/i915/i915_gpu_error.c @@ -242,6 +242,10 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m, struct drm_device *dev, struct drm_i915_error_ring *ring) { + struct drm_i915_private *dev_priv = dev-dev_private; + struct intel_engine_cs *from, *to; + int i, j; + if (!ring-valid) return; @@ -264,23 +268,19 @@ static void i915_ring_error_state(struct drm_i915_error_state_buf *m, if (INTEL_INFO(dev)-gen = 6) { err_printf(m, RC PSMI: 0x%08x\n, ring-rc_psmi); err_printf(m, FAULT_REG: 0x%08x\n, ring-fault_reg); - err_printf(m, SYNC_0: 0x%08x [last synced 0x%08x]\n, -ring-semaphore_mboxes[0], -ring-semaphore_seqno[0]); - err_printf(m, SYNC_1: 0x%08x [last synced 0x%08x]\n, -ring-semaphore_mboxes[1], -ring-semaphore_seqno[1]); - if (HAS_VEBOX(dev)) { - err_printf(m, SYNC_2: 0x%08x [last synced 0x%08x]\n, -ring-semaphore_mboxes[2], -ring-semaphore_seqno[2]); + for_each_ring(from, dev_priv, i) { + for_each_ring(to, dev_priv, j) { + int idx = intel_ring_sync_index(from, to); If you plan to get the gen8 gaps in the object: if (i == j !IS_GEN8()) continue; If not, with the existing code: if (i == j) continue; Currently, I am also in favor of for(i = 0; i NUM_RINGS - 1; i++) { if (!(INTEL_INFO(dev)-ring_mask (1i))) continue; for(j = 0; j NUM_RINGS - 1; j++) { if (!(INTEL_INFO(dev)-ring_mask (ji))) continue; err_printf(...) } } or use if (ring_is_initialied()) instead of checking ring mask. For error state, I prefer to use the mask because who knows what has happened to the rings on reset or something. Whatever you like. Fix the if (i == j) and lgtm + err_printf(m, SYNC[%s - %s]: 0x%08x [last synced 0x%08x]\n, +from-name, to-name, +ring-semaphore_mboxes[idx], +ring-semaphore_seqno[idx]); + } } } if (USES_PPGTT(dev)) { err_printf(m, GFX_MODE: 0x%08x\n, ring-vm_info.gfx_mode); - Should probably remove this if you do a respin. if (INTEL_INFO(dev)-gen = 8) { - int i; for (i = 0; i 4; i++) err_printf(m, PDP%d: 0x%016llx\n, i, ring-vm_info.pdp[i]); -- 1.9.3 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ben Widawsky, Intel Open Source Technology Center ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx