diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-01-27 14:15:11 -0500 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-01-28 06:21:37 -0500 |
commit | e2f973d58e80ba00bcfaa171169c42c710e7e826 (patch) | |
tree | 2d7111c6bd84f77c995cdc624eb2a425a5bbfe76 | |
parent | 21dd373486956d7789ffd878347c36efad16923d (diff) |
drm/i915: Record all error ringbuffers
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 23 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 22 |
3 files changed, 29 insertions, 18 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 5825a586015e..786c3ba8886c 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
@@ -805,15 +805,20 @@ static int i915_error_state(struct seq_file *m, void *unused) | |||
805 | } | 805 | } |
806 | } | 806 | } |
807 | 807 | ||
808 | if (error->ringbuffer) { | 808 | for (i = 0; i < ARRAY_SIZE(error->ringbuffer); i++) { |
809 | struct drm_i915_error_object *obj = error->ringbuffer; | 809 | if (error->ringbuffer[i]) { |
810 | 810 | struct drm_i915_error_object *obj = error->ringbuffer[i]; | |
811 | seq_printf(m, "--- ringbuffer = 0x%08x\n", obj->gtt_offset); | 811 | seq_printf(m, "%s --- ringbuffer = 0x%08x\n", |
812 | offset = 0; | 812 | dev_priv->ring[i].name, |
813 | for (page = 0; page < obj->page_count; page++) { | 813 | obj->gtt_offset); |
814 | for (elt = 0; elt < PAGE_SIZE/4; elt++) { | 814 | offset = 0; |
815 | seq_printf(m, "%08x : %08x\n", offset, obj->pages[page][elt]); | 815 | for (page = 0; page < obj->page_count; page++) { |
816 | offset += 4; | 816 | for (elt = 0; elt < PAGE_SIZE/4; elt++) { |
817 | seq_printf(m, "%08x : %08x\n", | ||
818 | offset, | ||
819 | obj->pages[page][elt]); | ||
820 | offset += 4; | ||
821 | } | ||
817 | } | 822 | } |
818 | } | 823 | } |
819 | } | 824 | } |
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index ff498b98c9bd..6e1cfa42f421 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -174,7 +174,7 @@ struct drm_i915_error_state { | |||
174 | int page_count; | 174 | int page_count; |
175 | u32 gtt_offset; | 175 | u32 gtt_offset; |
176 | u32 *pages[0]; | 176 | u32 *pages[0]; |
177 | } *ringbuffer, *batchbuffer[I915_NUM_RINGS]; | 177 | } *ringbuffer[I915_NUM_RINGS], *batchbuffer[I915_NUM_RINGS]; |
178 | struct drm_i915_error_buffer { | 178 | struct drm_i915_error_buffer { |
179 | u32 size; | 179 | u32 size; |
180 | u32 name; | 180 | u32 name; |
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index a98fb026d388..d388bbbe8c4a 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -648,9 +648,14 @@ static void | |||
648 | i915_error_state_free(struct drm_device *dev, | 648 | i915_error_state_free(struct drm_device *dev, |
649 | struct drm_i915_error_state *error) | 649 | struct drm_i915_error_state *error) |
650 | { | 650 | { |
651 | i915_error_object_free(error->batchbuffer[0]); | 651 | int i; |
652 | i915_error_object_free(error->batchbuffer[1]); | 652 | |
653 | i915_error_object_free(error->ringbuffer); | 653 | for (i = 0; i < ARRAY_SIZE(error->batchbuffer); i++) |
654 | i915_error_object_free(error->batchbuffer[i]); | ||
655 | |||
656 | for (i = 0; i < ARRAY_SIZE(error->ringbuffer); i++) | ||
657 | i915_error_object_free(error->ringbuffer[i]); | ||
658 | |||
654 | kfree(error->active_bo); | 659 | kfree(error->active_bo); |
655 | kfree(error->overlay); | 660 | kfree(error->overlay); |
656 | kfree(error); | 661 | kfree(error); |
@@ -824,15 +829,16 @@ static void i915_capture_error_state(struct drm_device *dev) | |||
824 | } | 829 | } |
825 | i915_gem_record_fences(dev, error); | 830 | i915_gem_record_fences(dev, error); |
826 | 831 | ||
827 | /* Record the active batchbuffers */ | 832 | /* Record the active batch and ring buffers */ |
828 | for (i = 0; i < I915_NUM_RINGS; i++) | 833 | for (i = 0; i < I915_NUM_RINGS; i++) { |
829 | error->batchbuffer[i] = | 834 | error->batchbuffer[i] = |
830 | i915_error_first_batchbuffer(dev_priv, | 835 | i915_error_first_batchbuffer(dev_priv, |
831 | &dev_priv->ring[i]); | 836 | &dev_priv->ring[i]); |
832 | 837 | ||
833 | /* Record the ringbuffer */ | 838 | error->ringbuffer[i] = |
834 | error->ringbuffer = i915_error_object_create(dev_priv, | 839 | i915_error_object_create(dev_priv, |
835 | dev_priv->ring[RCS].obj); | 840 | dev_priv->ring[i].obj); |
841 | } | ||
836 | 842 | ||
837 | /* Record buffers on the active and pinned lists. */ | 843 | /* Record buffers on the active and pinned lists. */ |
838 | error->active_bo = NULL; | 844 | error->active_bo = NULL; |