aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 5eacc497f179..985a13035550 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1886,7 +1886,6 @@ i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
1886{ 1886{
1887 struct drm_device *dev = obj->base.dev; 1887 struct drm_device *dev = obj->base.dev;
1888 struct drm_i915_private *dev_priv = dev->dev_private; 1888 struct drm_i915_private *dev_priv = dev->dev_private;
1889 struct i915_address_space *vm = &dev_priv->gtt.base;
1890 u32 seqno = intel_ring_get_seqno(ring); 1889 u32 seqno = intel_ring_get_seqno(ring);
1891 1890
1892 BUG_ON(ring == NULL); 1891 BUG_ON(ring == NULL);
@@ -1902,8 +1901,6 @@ i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
1902 obj->active = 1; 1901 obj->active = 1;
1903 } 1902 }
1904 1903
1905 /* Move from whatever list we were on to the tail of execution. */
1906 list_move_tail(&obj->mm_list, &vm->active_list);
1907 list_move_tail(&obj->ring_list, &ring->active_list); 1904 list_move_tail(&obj->ring_list, &ring->active_list);
1908 1905
1909 obj->last_read_seqno = seqno; 1906 obj->last_read_seqno = seqno;
@@ -1925,14 +1922,14 @@ i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
1925static void 1922static void
1926i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj) 1923i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
1927{ 1924{
1928 struct drm_device *dev = obj->base.dev; 1925 struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
1929 struct drm_i915_private *dev_priv = dev->dev_private; 1926 struct i915_address_space *ggtt_vm = &dev_priv->gtt.base;
1930 struct i915_address_space *vm = &dev_priv->gtt.base; 1927 struct i915_vma *vma = i915_gem_obj_to_vma(obj, ggtt_vm);
1931 1928
1932 BUG_ON(obj->base.write_domain & ~I915_GEM_GPU_DOMAINS); 1929 BUG_ON(obj->base.write_domain & ~I915_GEM_GPU_DOMAINS);
1933 BUG_ON(!obj->active); 1930 BUG_ON(!obj->active);
1934 1931
1935 list_move_tail(&obj->mm_list, &vm->inactive_list); 1932 list_move_tail(&vma->mm_list, &ggtt_vm->inactive_list);
1936 1933
1937 list_del_init(&obj->ring_list); 1934 list_del_init(&obj->ring_list);
1938 obj->ring = NULL; 1935 obj->ring = NULL;
@@ -2640,7 +2637,7 @@ int i915_vma_unbind(struct i915_vma *vma)
2640 i915_gem_gtt_finish_object(obj); 2637 i915_gem_gtt_finish_object(obj);
2641 i915_gem_object_unpin_pages(obj); 2638 i915_gem_object_unpin_pages(obj);
2642 2639
2643 list_del(&obj->mm_list); 2640 list_del(&vma->mm_list);
2644 /* Avoid an unnecessary call to unbind on rebind. */ 2641 /* Avoid an unnecessary call to unbind on rebind. */
2645 if (i915_is_ggtt(vma->vm)) 2642 if (i915_is_ggtt(vma->vm))
2646 obj->map_and_fenceable = true; 2643 obj->map_and_fenceable = true;
@@ -3187,7 +3184,7 @@ search_free:
3187 goto err_remove_node; 3184 goto err_remove_node;
3188 3185
3189 list_move_tail(&obj->global_list, &dev_priv->mm.bound_list); 3186 list_move_tail(&obj->global_list, &dev_priv->mm.bound_list);
3190 list_add_tail(&obj->mm_list, &vm->inactive_list); 3187 list_add_tail(&vma->mm_list, &vm->inactive_list);
3191 3188
3192 /* Keep GGTT vmas first to make debug easier */ 3189 /* Keep GGTT vmas first to make debug easier */
3193 if (i915_is_ggtt(vm)) 3190 if (i915_is_ggtt(vm))
@@ -3352,9 +3349,14 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
3352 old_write_domain); 3349 old_write_domain);
3353 3350
3354 /* And bump the LRU for this access */ 3351 /* And bump the LRU for this access */
3355 if (i915_gem_object_is_inactive(obj)) 3352 if (i915_gem_object_is_inactive(obj)) {
3356 list_move_tail(&obj->mm_list, 3353 struct i915_vma *vma = i915_gem_obj_to_vma(obj,
3357 &dev_priv->gtt.base.inactive_list); 3354 &dev_priv->gtt.base);
3355 if (vma)
3356 list_move_tail(&vma->mm_list,
3357 &dev_priv->gtt.base.inactive_list);
3358
3359 }
3358 3360
3359 return 0; 3361 return 0;
3360} 3362}
@@ -3927,7 +3929,6 @@ unlock:
3927void i915_gem_object_init(struct drm_i915_gem_object *obj, 3929void i915_gem_object_init(struct drm_i915_gem_object *obj,
3928 const struct drm_i915_gem_object_ops *ops) 3930 const struct drm_i915_gem_object_ops *ops)
3929{ 3931{
3930 INIT_LIST_HEAD(&obj->mm_list);
3931 INIT_LIST_HEAD(&obj->global_list); 3932 INIT_LIST_HEAD(&obj->global_list);
3932 INIT_LIST_HEAD(&obj->ring_list); 3933 INIT_LIST_HEAD(&obj->ring_list);
3933 INIT_LIST_HEAD(&obj->exec_list); 3934 INIT_LIST_HEAD(&obj->exec_list);
@@ -4069,6 +4070,7 @@ struct i915_vma *i915_gem_vma_create(struct drm_i915_gem_object *obj,
4069 return ERR_PTR(-ENOMEM); 4070 return ERR_PTR(-ENOMEM);
4070 4071
4071 INIT_LIST_HEAD(&vma->vma_link); 4072 INIT_LIST_HEAD(&vma->vma_link);
4073 INIT_LIST_HEAD(&vma->mm_list);
4072 vma->vm = vm; 4074 vma->vm = vm;
4073 vma->obj = obj; 4075 vma->obj = obj;
4074 4076