Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_gem.c               |  4 +--
 drivers/gpu/drm/i915/i915_gem_evict.c         | 12 ++++++---
 drivers/gpu/drm/i915/i915_gem_gtt.c           | 27 ++++++-------------
 drivers/gpu/drm/i915/i915_gem_gtt.h           | 10 +------
 drivers/gpu/drm/i915/i915_gem_shrinker.c      |  3 +--
 drivers/gpu/drm/i915/i915_gem_stolen.c        |  4 ---
 drivers/gpu/drm/i915/i915_gpu_error.c         | 11 ++++----
 drivers/gpu/drm/i915/i915_vma.c               |  7 +----
 .../gpu/drm/i915/selftests/i915_gem_evict.c   | 11 +++-----
 drivers/gpu/drm/i915/selftests/i915_gem_gtt.c |  4 ---
 10 files changed, 32 insertions(+), 61 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 66445e34c93c..a954e15c0315 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -254,7 +254,7 @@ i915_gem_get_aperture_ioctl(struct drm_device *dev, void 
*data,
        mutex_lock(&ggtt->vm.mutex);
 
        pinned = ggtt->vm.reserved;
-       list_for_each_entry(vma, &ggtt->vm.bound_list, vm_link)
+       list_for_each_entry(vma, &ggtt->vm.vma_list, vm_link)
                if (i915_vma_is_pinned(vma))
                        pinned += vma->node.size;
 
@@ -1692,7 +1692,7 @@ static void i915_gem_object_bump_inactive_ggtt(struct 
drm_i915_gem_object *obj)
                if (!drm_mm_node_allocated(&vma->node))
                        continue;
 
-               list_move_tail(&vma->vm_link, &vma->vm->bound_list);
+               list_move_tail(&vma->vm_link, &i915->ggtt.vm.vma_list);
        }
        mutex_unlock(&i915->ggtt.vm.mutex);
 
diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c 
b/drivers/gpu/drm/i915/i915_gem_evict.c
index b7c2a396a63f..8ccde5761c2c 100644
--- a/drivers/gpu/drm/i915/i915_gem_evict.c
+++ b/drivers/gpu/drm/i915/i915_gem_evict.c
@@ -170,7 +170,10 @@ i915_gem_evict_something(struct i915_address_space *vm,
 search_again:
        active = NULL;
        INIT_LIST_HEAD(&eviction_list);
-       list_for_each_entry_safe(vma, next, &vm->bound_list, vm_link) {
+       list_for_each_entry_safe(vma, next, &vm->vma_list, vm_link) {
+               if (!drm_mm_node_allocated(&vma->node))
+                       continue;
+
                if (i915_vma_is_active(vma)) {
                        if (vma == active) {
                                if (flags & PIN_NONBLOCK)
@@ -183,7 +186,7 @@ i915_gem_evict_something(struct i915_address_space *vm,
                                if (!active)
                                        active = vma;
 
-                               list_move_tail(&vma->vm_link, &vm->bound_list);
+                               list_move_tail(&vma->vm_link, &vm->vma_list);
                                continue;
                        }
                }
@@ -419,7 +422,10 @@ int i915_gem_evict_vm(struct i915_address_space *vm)
 
        INIT_LIST_HEAD(&eviction_list);
        mutex_lock(&vm->mutex);
-       list_for_each_entry(vma, &vm->bound_list, vm_link) {
+       list_for_each_entry(vma, &vm->vma_list, vm_link) {
+               if (!drm_mm_node_allocated(&vma->node))
+                       continue;
+
                if (i915_vma_is_pinned(vma))
                        continue;
 
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 7ae10fbb2ee0..17b752f9a1e6 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -492,8 +492,7 @@ static void i915_address_space_init(struct 
i915_address_space *vm, int subclass)
 
        stash_init(&vm->free_pages);
 
-       INIT_LIST_HEAD(&vm->unbound_list);
-       INIT_LIST_HEAD(&vm->bound_list);
+       INIT_LIST_HEAD(&vm->vma_list);
 }
 
 static void i915_address_space_fini(struct i915_address_space *vm)
@@ -1934,7 +1933,7 @@ static struct i915_vma *pd_vma_create(struct 
gen6_hw_ppgtt *ppgtt, int size)
        INIT_LIST_HEAD(&vma->obj_link);
 
        mutex_lock(&vma->vm->mutex);
-       list_add(&vma->vm_link, &vma->vm->unbound_list);
+       list_add(&vma->vm_link, &vma->vm->vma_list);
        mutex_unlock(&vma->vm->mutex);
 
        return vma;
@@ -2113,19 +2112,12 @@ void i915_ppgtt_close(struct i915_address_space *vm)
 
 static void ppgtt_destroy_vma(struct i915_address_space *vm)
 {
-       struct list_head *phases[] = {
-               &vm->bound_list,
-               &vm->unbound_list,
-               NULL,
-       }, **phase;
+       struct i915_vma *vma, *vn;
 
        vm->closed = true;
-       for (phase = phases; *phase; phase++) {
-               struct i915_vma *vma, *vn;
-
-               list_for_each_entry_safe(vma, vn, *phase, vm_link)
-                       i915_vma_destroy(vma);
-       }
+       list_for_each_entry_safe(vma, vn, &vm->vma_list, vm_link)
+               i915_vma_destroy(vma);
+       GEM_BUG_ON(!list_empty(&vm->vma_list));
 }
 
 void i915_ppgtt_release(struct kref *kref)
@@ -2137,9 +2129,6 @@ void i915_ppgtt_release(struct kref *kref)
 
        ppgtt_destroy_vma(&ppgtt->vm);
 
-       GEM_BUG_ON(!list_empty(&ppgtt->vm.bound_list));
-       GEM_BUG_ON(!list_empty(&ppgtt->vm.unbound_list));
-
        ppgtt->vm.cleanup(&ppgtt->vm);
        i915_address_space_fini(&ppgtt->vm);
        kfree(ppgtt);
@@ -2802,7 +2791,7 @@ void i915_ggtt_cleanup_hw(struct drm_i915_private 
*dev_priv)
        mutex_lock(&dev_priv->drm.struct_mutex);
        i915_gem_fini_aliasing_ppgtt(dev_priv);
 
-       list_for_each_entry_safe(vma, vn, &ggtt->vm.bound_list, vm_link)
+       list_for_each_entry_safe(vma, vn, &ggtt->vm.vma_list, vm_link)
                WARN_ON(i915_vma_unbind(vma));
 
        if (drm_mm_node_allocated(&ggtt->error_capture))
@@ -3514,7 +3503,7 @@ void i915_gem_restore_gtt_mappings(struct 
drm_i915_private *dev_priv)
        ggtt->vm.closed = true; /* skip rewriting PTE on VMA unbind */
 
        /* clflush objects bound into the GGTT and rebind them. */
-       list_for_each_entry_safe(vma, vn, &ggtt->vm.bound_list, vm_link) {
+       list_for_each_entry_safe(vma, vn, &ggtt->vm.vma_list, vm_link) {
                struct drm_i915_gem_object *obj = vma->obj;
 
                if (!(vma->flags & I915_VMA_GLOBAL_BIND))
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h 
b/drivers/gpu/drm/i915/i915_gem_gtt.h
index bd679c8c56dd..ac11f2bce2d5 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -298,15 +298,7 @@ struct i915_address_space {
        struct i915_page_directory *scratch_pd;
        struct i915_page_directory_pointer *scratch_pdp; /* GEN8+ & 48b PPGTT */
 
-       /**
-        * List of vma currently bound.
-        */
-       struct list_head bound_list;
-
-       /**
-        * List of vma that are not unbound.
-        */
-       struct list_head unbound_list;
+       struct list_head vma_list;
 
        struct pagestash free_pages;
 
diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c 
b/drivers/gpu/drm/i915/i915_gem_shrinker.c
index 9d04c26c04f9..f4bc72d4f44f 100644
--- a/drivers/gpu/drm/i915/i915_gem_shrinker.c
+++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c
@@ -491,8 +491,7 @@ i915_gem_shrinker_vmap(struct notifier_block *nb, unsigned 
long event, void *ptr
 
        /* We also want to clear any cached iomaps as they wrap vmap */
        mutex_lock(&i915->ggtt.vm.mutex);
-       list_for_each_entry_safe(vma, next,
-                                &i915->ggtt.vm.bound_list, vm_link) {
+       list_for_each_entry_safe(vma, next, &i915->ggtt.vm.vma_list, vm_link) {
                unsigned long count = vma->node.size >> PAGE_SHIFT;
 
                if (!vma->iomap || i915_vma_is_active(vma))
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c 
b/drivers/gpu/drm/i915/i915_gem_stolen.c
index 21de3a5e9910..7c8725f12cef 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -703,10 +703,6 @@ i915_gem_object_create_stolen_for_preallocated(struct 
drm_i915_private *dev_priv
        vma->flags |= I915_VMA_GLOBAL_BIND;
        __i915_vma_set_map_and_fenceable(vma);
 
-       mutex_lock(&ggtt->vm.mutex);
-       list_move_tail(&vma->vm_link, &ggtt->vm.bound_list);
-       mutex_unlock(&ggtt->vm.mutex);
-
        spin_lock(&dev_priv->mm.obj_lock);
        list_move_tail(&obj->mm.link, &dev_priv->mm.bound_list);
        obj->bind_count++;
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c 
b/drivers/gpu/drm/i915/i915_gpu_error.c
index 61ae07993ae7..8cd7e444f38f 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -1609,7 +1609,7 @@ static void gem_capture_vm(struct i915_gpu_state *error,
        int count;
 
        count = 0;
-       list_for_each_entry(vma, &vm->bound_list, vm_link)
+       list_for_each_entry(vma, &vm->vma_list, vm_link)
                if (i915_vma_is_active(vma))
                        count++;
 
@@ -1617,7 +1617,7 @@ static void gem_capture_vm(struct i915_gpu_state *error,
        if (count)
                active_bo = kcalloc(count, sizeof(*active_bo), GFP_ATOMIC);
        if (active_bo)
-               count = capture_error_bo(active_bo, count, &vm->bound_list,
+               count = capture_error_bo(active_bo, count, &vm->vma_list,
                                         true, false);
        else
                count = 0;
@@ -1659,8 +1659,9 @@ static void capture_pinned_buffers(struct i915_gpu_state 
*error)
        int count;
 
        count = 0;
-       list_for_each_entry(vma, &vm->bound_list, vm_link)
-               count++;
+       list_for_each_entry(vma, &vm->vma_list, vm_link)
+               if (i915_vma_is_pinned(vma))
+                       count++;
 
        bo = NULL;
        if (count)
@@ -1669,7 +1670,7 @@ static void capture_pinned_buffers(struct i915_gpu_state 
*error)
                return;
 
        error->pinned_bo_count =
-               capture_error_bo(bo, count, &vm->bound_list, false, true);
+               capture_error_bo(bo, count, &vm->vma_list, false, true);
        error->pinned_bo = bo;
 }
 
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index dcbd0d345c72..ad76a3309830 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -215,7 +215,7 @@ vma_create(struct drm_i915_gem_object *obj,
        rb_insert_color(&vma->obj_node, &obj->vma_tree);
 
        mutex_lock(&vm->mutex);
-       list_add(&vma->vm_link, &vm->unbound_list);
+       list_add_tail(&vma->vm_link, &vm->vma_list);
        mutex_unlock(&vm->mutex);
 
        return vma;
@@ -659,10 +659,6 @@ i915_vma_insert(struct i915_vma *vma, u64 size, u64 
alignment, u64 flags)
        GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
        GEM_BUG_ON(!i915_gem_valid_gtt_space(vma, cache_level));
 
-       mutex_lock(&vma->vm->mutex);
-       list_move_tail(&vma->vm_link, &vma->vm->bound_list);
-       mutex_unlock(&vma->vm->mutex);
-
        if (vma->obj) {
                struct drm_i915_gem_object *obj = vma->obj;
 
@@ -696,7 +692,6 @@ i915_vma_remove(struct i915_vma *vma)
 
        mutex_lock(&vma->vm->mutex);
        drm_mm_remove_node(&vma->node);
-       list_move_tail(&vma->vm_link, &vma->vm->unbound_list);
        mutex_unlock(&vma->vm->mutex);
 
        /*
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c 
b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
index eaefba7470f7..8750cfbf1486 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c
@@ -57,11 +57,6 @@ static int populate_ggtt(struct drm_i915_private *i915)
                return -EINVAL;
        }
 
-       if (list_empty(&i915->ggtt.vm.bound_list)) {
-               pr_err("No objects on the GGTT inactive list!\n");
-               return -EINVAL;
-       }
-
        return 0;
 }
 
@@ -71,8 +66,10 @@ static void unpin_ggtt(struct drm_i915_private *i915)
        struct i915_vma *vma;
 
        mutex_lock(&ggtt->vm.mutex);
-       list_for_each_entry(vma, &i915->ggtt.vm.bound_list, vm_link)
-               i915_vma_unpin(vma);
+       list_for_each_entry(vma, &i915->ggtt.vm.vma_list, vm_link) {
+               if (i915_vma_is_pinned(vma))
+                       i915_vma_unpin(vma);
+       }
        mutex_unlock(&ggtt->vm.mutex);
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
index 850f9eff6029..550cb72f1e2b 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c
@@ -1237,10 +1237,6 @@ static void track_vma_bind(struct i915_vma *vma)
        __i915_gem_object_pin_pages(obj);
 
        vma->pages = obj->mm.pages;
-
-       mutex_lock(&vma->vm->mutex);
-       list_move_tail(&vma->vm_link, &vma->vm->bound_list);
-       mutex_unlock(&vma->vm->mutex);
 }
 
 static int exercise_mock(struct drm_i915_private *i915,
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to