diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 28 |
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, | |||
1925 | static void | 1922 | static void |
1926 | i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj) | 1923 | i915_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: | |||
3927 | void i915_gem_object_init(struct drm_i915_gem_object *obj, | 3929 | void 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 | ||