aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-09-29 11:10:57 -0400
committerChris Wilson <chris@chris-wilson.co.uk>2010-09-30 04:30:11 -0400
commit23bc598253fa8e9ede6ad29304ea4ed177e9fc23 (patch)
tree0b9c3ecbd8beecae8f15d5ae5a204b0f7aac985d /drivers/gpu/drm/i915/i915_gem.c
parent891b48cfc8659be486c70a03ad815f9a2485ee58 (diff)
drm/i915/debug: Convert i915_verify_active() to scan all lists
... and check more regularly. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c29
1 files changed, 10 insertions, 19 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index fe1424c6c3fa..c3a7065947ce 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -109,6 +109,7 @@ static int i915_mutex_lock_interruptible(struct drm_device *dev)
109 return -EAGAIN; 109 return -EAGAIN;
110 } 110 }
111 111
112 WARN_ON(i915_verify_lists(dev));
112 return 0; 113 return 0;
113} 114}
114 115
@@ -1612,7 +1613,6 @@ i915_gem_object_move_to_inactive(struct drm_gem_object *obj)
1612 drm_i915_private_t *dev_priv = dev->dev_private; 1613 drm_i915_private_t *dev_priv = dev->dev_private;
1613 struct drm_i915_gem_object *obj_priv = to_intel_bo(obj); 1614 struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
1614 1615
1615 i915_verify_inactive(dev, __FILE__, __LINE__);
1616 if (obj_priv->pin_count != 0) 1616 if (obj_priv->pin_count != 0)
1617 list_move_tail(&obj_priv->list, &dev_priv->mm.pinned_list); 1617 list_move_tail(&obj_priv->list, &dev_priv->mm.pinned_list);
1618 else 1618 else
@@ -1626,7 +1626,7 @@ i915_gem_object_move_to_inactive(struct drm_gem_object *obj)
1626 obj_priv->active = 0; 1626 obj_priv->active = 0;
1627 drm_gem_object_unreference(obj); 1627 drm_gem_object_unreference(obj);
1628 } 1628 }
1629 i915_verify_inactive(dev, __FILE__, __LINE__); 1629 WARN_ON(i915_verify_lists(dev));
1630} 1630}
1631 1631
1632static void 1632static void
@@ -1821,6 +1821,8 @@ i915_gem_retire_requests_ring(struct drm_device *dev,
1821 list_empty(&ring->request_list)) 1821 list_empty(&ring->request_list))
1822 return; 1822 return;
1823 1823
1824 WARN_ON(i915_verify_lists(dev));
1825
1824 seqno = ring->get_seqno(dev, ring); 1826 seqno = ring->get_seqno(dev, ring);
1825 while (!list_empty(&ring->request_list)) { 1827 while (!list_empty(&ring->request_list)) {
1826 struct drm_i915_gem_request *request; 1828 struct drm_i915_gem_request *request;
@@ -1865,6 +1867,8 @@ i915_gem_retire_requests_ring(struct drm_device *dev,
1865 ring->user_irq_put(dev, ring); 1867 ring->user_irq_put(dev, ring);
1866 dev_priv->trace_irq_seqno = 0; 1868 dev_priv->trace_irq_seqno = 0;
1867 } 1869 }
1870
1871 WARN_ON(i915_verify_lists(dev));
1868} 1872}
1869 1873
1870void 1874void
@@ -3690,8 +3694,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
3690 if (ret) 3694 if (ret)
3691 goto pre_mutex_err; 3695 goto pre_mutex_err;
3692 3696
3693 i915_verify_inactive(dev, __FILE__, __LINE__);
3694
3695 if (dev_priv->mm.suspended) { 3697 if (dev_priv->mm.suspended) {
3696 mutex_unlock(&dev->struct_mutex); 3698 mutex_unlock(&dev->struct_mutex);
3697 ret = -EBUSY; 3699 ret = -EBUSY;
@@ -3811,8 +3813,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
3811 goto err; 3813 goto err;
3812 } 3814 }
3813 3815
3814 i915_verify_inactive(dev, __FILE__, __LINE__);
3815
3816 /* Zero the global flush/invalidate flags. These 3816 /* Zero the global flush/invalidate flags. These
3817 * will be modified as new domains are computed 3817 * will be modified as new domains are computed
3818 * for each object 3818 * for each object
@@ -3828,8 +3828,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
3828 i915_gem_object_set_to_gpu_domain(obj); 3828 i915_gem_object_set_to_gpu_domain(obj);
3829 } 3829 }
3830 3830
3831 i915_verify_inactive(dev, __FILE__, __LINE__);
3832
3833 if (dev->invalidate_domains | dev->flush_domains) { 3831 if (dev->invalidate_domains | dev->flush_domains) {
3834#if WATCH_EXEC 3832#if WATCH_EXEC
3835 DRM_INFO("%s: invalidate_domains %08x flush_domains %08x\n", 3833 DRM_INFO("%s: invalidate_domains %08x flush_domains %08x\n",
@@ -3860,8 +3858,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
3860 old_write_domain); 3858 old_write_domain);
3861 } 3859 }
3862 3860
3863 i915_verify_inactive(dev, __FILE__, __LINE__);
3864
3865#if WATCH_COHERENCY 3861#if WATCH_COHERENCY
3866 for (i = 0; i < args->buffer_count; i++) { 3862 for (i = 0; i < args->buffer_count; i++) {
3867 i915_gem_object_check_coherency(object_list[i], 3863 i915_gem_object_check_coherency(object_list[i],
@@ -3890,8 +3886,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
3890 */ 3886 */
3891 i915_retire_commands(dev, ring); 3887 i915_retire_commands(dev, ring);
3892 3888
3893 i915_verify_inactive(dev, __FILE__, __LINE__);
3894
3895 for (i = 0; i < args->buffer_count; i++) { 3889 for (i = 0; i < args->buffer_count; i++) {
3896 struct drm_gem_object *obj = object_list[i]; 3890 struct drm_gem_object *obj = object_list[i];
3897 obj_priv = to_intel_bo(obj); 3891 obj_priv = to_intel_bo(obj);
@@ -3902,8 +3896,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
3902 i915_add_request(dev, file_priv, request, ring); 3896 i915_add_request(dev, file_priv, request, ring);
3903 request = NULL; 3897 request = NULL;
3904 3898
3905 i915_verify_inactive(dev, __FILE__, __LINE__);
3906
3907err: 3899err:
3908 for (i = 0; i < pinned; i++) 3900 for (i = 0; i < pinned; i++)
3909 i915_gem_object_unpin(object_list[i]); 3901 i915_gem_object_unpin(object_list[i]);
@@ -4094,8 +4086,7 @@ i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment)
4094 int ret; 4086 int ret;
4095 4087
4096 BUG_ON(obj_priv->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT); 4088 BUG_ON(obj_priv->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT);
4097 4089 WARN_ON(i915_verify_lists(dev));
4098 i915_verify_inactive(dev, __FILE__, __LINE__);
4099 4090
4100 if (obj_priv->gtt_space != NULL) { 4091 if (obj_priv->gtt_space != NULL) {
4101 if (alignment == 0) 4092 if (alignment == 0)
@@ -4129,8 +4120,8 @@ i915_gem_object_pin(struct drm_gem_object *obj, uint32_t alignment)
4129 list_move_tail(&obj_priv->list, 4120 list_move_tail(&obj_priv->list,
4130 &dev_priv->mm.pinned_list); 4121 &dev_priv->mm.pinned_list);
4131 } 4122 }
4132 i915_verify_inactive(dev, __FILE__, __LINE__);
4133 4123
4124 WARN_ON(i915_verify_lists(dev));
4134 return 0; 4125 return 0;
4135} 4126}
4136 4127
@@ -4141,7 +4132,7 @@ i915_gem_object_unpin(struct drm_gem_object *obj)
4141 drm_i915_private_t *dev_priv = dev->dev_private; 4132 drm_i915_private_t *dev_priv = dev->dev_private;
4142 struct drm_i915_gem_object *obj_priv = to_intel_bo(obj); 4133 struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
4143 4134
4144 i915_verify_inactive(dev, __FILE__, __LINE__); 4135 WARN_ON(i915_verify_lists(dev));
4145 obj_priv->pin_count--; 4136 obj_priv->pin_count--;
4146 BUG_ON(obj_priv->pin_count < 0); 4137 BUG_ON(obj_priv->pin_count < 0);
4147 BUG_ON(obj_priv->gtt_space == NULL); 4138 BUG_ON(obj_priv->gtt_space == NULL);
@@ -4157,7 +4148,7 @@ i915_gem_object_unpin(struct drm_gem_object *obj)
4157 atomic_dec(&dev->pin_count); 4148 atomic_dec(&dev->pin_count);
4158 atomic_sub(obj->size, &dev->pin_memory); 4149 atomic_sub(obj->size, &dev->pin_memory);
4159 } 4150 }
4160 i915_verify_inactive(dev, __FILE__, __LINE__); 4151 WARN_ON(i915_verify_lists(dev));
4161} 4152}
4162 4153
4163int 4154int