drm/i915: Wrap vma->pin_count accessors with small inline helpers
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 4 Aug 2016 15:32:30 +0000 (16:32 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 4 Aug 2016 19:19:58 +0000 (20:19 +0100)
In the next few patches, the VMA pinning API is overhauled and to reduce
the churn we pull out the update to the accessors into a prep patch.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1470324762-2545-14-git-send-email-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_debugfs.c
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_gem_evict.c
drivers/gpu/drm/i915/i915_gem_execbuffer.c
drivers/gpu/drm/i915/i915_gem_fence.c
drivers/gpu/drm/i915/i915_gem_gtt.c
drivers/gpu/drm/i915/i915_gem_gtt.h
drivers/gpu/drm/i915/i915_gpu_error.c

index b35e6174fa7dd17eba60c5b7166a49a32c39ff2d..4401a2ab9a742e0ebbae8131485c92b713b5c6b8 100644 (file)
@@ -168,7 +168,7 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
        if (obj->base.name)
                seq_printf(m, " (name: %d)", obj->base.name);
        list_for_each_entry(vma, &obj->vma_list, obj_link) {
-               if (vma->pin_count > 0)
+               if (i915_vma_is_pinned(vma))
                        pin_count++;
        }
        seq_printf(m, " (pinned x %d)", pin_count);
index 646cd0dd15a0e88af01e5fd90a320f5e82e4aa6e..89255917d9920f9d3510053f524336fe4e81f830 100644 (file)
@@ -153,10 +153,10 @@ i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
        pinned = 0;
        mutex_lock(&dev->struct_mutex);
        list_for_each_entry(vma, &ggtt->base.active_list, vm_link)
-               if (vma->pin_count)
+               if (i915_vma_is_pinned(vma))
                        pinned += vma->node.size;
        list_for_each_entry(vma, &ggtt->base.inactive_list, vm_link)
-               if (vma->pin_count)
+               if (i915_vma_is_pinned(vma))
                        pinned += vma->node.size;
        mutex_unlock(&dev->struct_mutex);
 
@@ -2809,7 +2809,7 @@ static void i915_gem_object_finish_gtt(struct drm_i915_gem_object *obj)
 
 static void __i915_vma_iounmap(struct i915_vma *vma)
 {
-       GEM_BUG_ON(vma->pin_count);
+       GEM_BUG_ON(i915_vma_is_pinned(vma));
 
        if (vma->iomap == NULL)
                return;
@@ -2836,7 +2836,7 @@ int i915_vma_unbind(struct i915_vma *vma)
                 * take a pin on the vma so that the second unbind is
                 * aborted.
                 */
-               vma->pin_count++;
+               __i915_vma_pin(vma);
 
                for_each_active(active, idx) {
                        ret = i915_gem_active_retire(&vma->last_read[idx],
@@ -2845,14 +2845,14 @@ int i915_vma_unbind(struct i915_vma *vma)
                                break;
                }
 
-               vma->pin_count--;
+               __i915_vma_unpin(vma);
                if (ret)
                        return ret;
 
                GEM_BUG_ON(i915_vma_is_active(vma));
        }
 
-       if (vma->pin_count)
+       if (i915_vma_is_pinned(vma))
                return -EBUSY;
 
        if (!drm_mm_node_allocated(&vma->node))
@@ -3297,7 +3297,7 @@ restart:
                if (!drm_mm_node_allocated(&vma->node))
                        continue;
 
-               if (vma->pin_count) {
+               if (i915_vma_is_pinned(vma)) {
                        DRM_DEBUG("can not change the cache level of pinned objects\n");
                        return -EBUSY;
                }
@@ -3734,11 +3734,11 @@ i915_gem_object_do_pin(struct drm_i915_gem_object *obj,
                          i915_gem_obj_to_vma(obj, vm);
 
        if (vma) {
-               if (WARN_ON(vma->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT))
+               if (WARN_ON(i915_vma_pin_count(vma) == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT))
                        return -EBUSY;
 
                if (i915_vma_misplaced(vma, size, alignment, flags)) {
-                       WARN(vma->pin_count,
+                       WARN(i915_vma_is_pinned(vma),
                             "bo is already pinned in %s with incorrect alignment:"
                             " offset=%08x %08x, req.alignment=%llx, req.map_and_fenceable=%d,"
                             " obj->map_and_fenceable=%d\n",
@@ -3776,7 +3776,7 @@ i915_gem_object_do_pin(struct drm_i915_gem_object *obj,
 
        GEM_BUG_ON(i915_vma_misplaced(vma, size, alignment, flags));
 
-       vma->pin_count++;
+       __i915_vma_pin(vma);
        return 0;
 }
 
@@ -3815,10 +3815,10 @@ i915_gem_object_ggtt_unpin_view(struct drm_i915_gem_object *obj,
 {
        struct i915_vma *vma = i915_gem_obj_to_ggtt_view(obj, view);
 
-       WARN_ON(vma->pin_count == 0);
+       WARN_ON(!i915_vma_is_pinned(vma));
        WARN_ON(!i915_gem_obj_ggtt_bound_view(obj, view));
 
-       --vma->pin_count;
+       __i915_vma_unpin(vma);
 }
 
 int
@@ -4686,7 +4686,7 @@ bool i915_gem_obj_is_pinned(struct drm_i915_gem_object *obj)
 {
        struct i915_vma *vma;
        list_for_each_entry(vma, &obj->vma_list, obj_link)
-               if (vma->pin_count > 0)
+               if (i915_vma_is_pinned(vma))
                        return true;
 
        return false;
index ef12ecd2b182adcc6d433d49a9dfd020918b4494..7be425826539c7756bd3eb30b372718a07a0158f 100644 (file)
@@ -49,7 +49,7 @@ gpu_is_idle(struct drm_i915_private *dev_priv)
 static bool
 mark_free(struct i915_vma *vma, struct list_head *unwind)
 {
-       if (vma->pin_count)
+       if (i915_vma_is_pinned(vma))
                return false;
 
        if (WARN_ON(!list_empty(&vma->exec_list)))
@@ -183,7 +183,7 @@ found:
         */
        list_for_each_entry_safe(vma, next, &eviction_list, exec_list) {
                if (drm_mm_scan_remove_block(&vma->node))
-                       vma->pin_count++;
+                       __i915_vma_pin(vma);
                else
                        list_del_init(&vma->exec_list);
        }
@@ -195,7 +195,7 @@ found:
                                       exec_list);
 
                list_del_init(&vma->exec_list);
-               vma->pin_count--;
+               __i915_vma_unpin(vma);
                if (ret == 0)
                        ret = i915_vma_unbind(vma);
        }
@@ -220,8 +220,8 @@ i915_gem_evict_for_vma(struct i915_vma *target)
 
                vma = container_of(node, typeof(*vma), node);
 
-               if (vma->pin_count) {
-                       if (!vma->exec_entry || (vma->pin_count > 1))
+               if (i915_vma_is_pinned(vma)) {
+                       if (!vma->exec_entry || i915_vma_pin_count(vma) > 1)
                                /* Object is pinned for some other use */
                                return -EBUSY;
 
@@ -281,7 +281,7 @@ int i915_gem_evict_vm(struct i915_address_space *vm, bool do_idle)
        }
 
        list_for_each_entry_safe(vma, next, &vm->inactive_list, vm_link)
-               if (vma->pin_count == 0)
+               if (!i915_vma_is_pinned(vma))
                        WARN_ON(i915_vma_unbind(vma));
 
        return 0;
index d2e27e730ecb1a9b36e7cc640b23c9fd1bb9c717..82ed80f68103c6bc348c267344753e935518dc1a 100644 (file)
@@ -261,7 +261,7 @@ i915_gem_execbuffer_unreserve_vma(struct i915_vma *vma)
                i915_gem_object_unpin_fence(obj);
 
        if (entry->flags & __EXEC_OBJECT_HAS_PIN)
-               vma->pin_count--;
+               __i915_vma_unpin(vma);
 
        entry->flags &= ~(__EXEC_OBJECT_HAS_FENCE | __EXEC_OBJECT_HAS_PIN);
 }
index dbaab9ce29c9f154ff59fbf525bf157d7058ac61..3b462da612cabd206137e868eb08c5d3ed99c141 100644 (file)
@@ -431,7 +431,7 @@ i915_gem_object_pin_fence(struct drm_i915_gem_object *obj)
 
                WARN_ON(!ggtt_vma ||
                        dev_priv->fence_regs[obj->fence_reg].pin_count >
-                       ggtt_vma->pin_count);
+                       i915_vma_pin_count(ggtt_vma));
                dev_priv->fence_regs[obj->fence_reg].pin_count++;
                return true;
        } else
index b8c1e9d4fac8bb5bf3913345c2b4fe90ee33bb28..088b89b3ea487ac2ee282da2b8c5d104da83b9a8 100644 (file)
@@ -3334,7 +3334,7 @@ i915_vma_retire(struct i915_gem_active *active,
                return;
 
        list_move_tail(&vma->vm_link, &vma->vm->inactive_list);
-       if (unlikely(vma->closed && !vma->pin_count))
+       if (unlikely(vma->closed && !i915_vma_is_pinned(vma)))
                WARN_ON(i915_vma_unbind(vma));
 }
 
@@ -3357,7 +3357,7 @@ void i915_vma_close(struct i915_vma *vma)
        vma->closed = true;
 
        list_del_init(&vma->obj_link);
-       if (!i915_vma_is_active(vma) && !vma->pin_count)
+       if (!i915_vma_is_active(vma) && !i915_vma_is_pinned(vma))
                WARN_ON(i915_vma_unbind(vma));
 }
 
@@ -3666,12 +3666,12 @@ int i915_vma_bind(struct i915_vma *vma, enum i915_cache_level cache_level,
 
        if (vma->bound == 0 && vma->vm->allocate_va_range) {
                /* XXX: i915_vma_pin() will fix this +- hack */
-               vma->pin_count++;
+               __i915_vma_pin(vma);
                trace_i915_va_alloc(vma);
                ret = vma->vm->allocate_va_range(vma->vm,
                                                 vma->node.start,
                                                 vma->node.size);
-               vma->pin_count--;
+               __i915_vma_unpin(vma);
                if (ret)
                        return ret;
        }
@@ -3707,6 +3707,6 @@ void __iomem *i915_vma_pin_iomap(struct i915_vma *vma)
                vma->iomap = ptr;
        }
 
-       vma->pin_count++;
+       __i915_vma_pin(vma);
        return ptr;
 }
index 2c0360c1ab978e5b189f3b00837b03a074114082..eee22fcf5826633dad7eb1d892843eb6ff76707e 100644 (file)
@@ -609,6 +609,34 @@ i915_ggtt_view_equal(const struct i915_ggtt_view *a,
        return true;
 }
 
+static inline int i915_vma_pin_count(const struct i915_vma *vma)
+{
+       return vma->pin_count;
+}
+
+static inline bool i915_vma_is_pinned(const struct i915_vma *vma)
+{
+       return i915_vma_pin_count(vma);
+}
+
+static inline void __i915_vma_pin(struct i915_vma *vma)
+{
+       vma->pin_count++;
+       GEM_BUG_ON(!i915_vma_is_pinned(vma));
+}
+
+static inline void __i915_vma_unpin(struct i915_vma *vma)
+{
+       GEM_BUG_ON(!i915_vma_is_pinned(vma));
+       vma->pin_count--;
+}
+
+static inline void i915_vma_unpin(struct i915_vma *vma)
+{
+       GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
+       __i915_vma_unpin(vma);
+}
+
 /**
  * i915_vma_pin_iomap - calls ioremap_wc to map the GGTT VMA via the aperture
  * @vma: VMA to iomap
@@ -637,9 +665,8 @@ void __iomem *i915_vma_pin_iomap(struct i915_vma *vma);
 static inline void i915_vma_unpin_iomap(struct i915_vma *vma)
 {
        lockdep_assert_held(&vma->vm->dev->struct_mutex);
-       GEM_BUG_ON(vma->pin_count == 0);
        GEM_BUG_ON(vma->iomap == NULL);
-       vma->pin_count--;
+       i915_vma_unpin(vma);
 }
 
 #endif
index c19f72e1bcf75d01334d18c5a99cbe7138c376a1..d94eb907a23af541ecb36fb4113e83f7d896f0aa 100644 (file)
@@ -818,7 +818,7 @@ static u32 capture_pinned_bo(struct drm_i915_error_buffer *err,
                        break;
 
                list_for_each_entry(vma, &obj->vma_list, obj_link)
-                       if (vma->vm == vm && vma->pin_count > 0)
+                       if (vma->vm == vm && i915_vma_is_pinned(vma))
                                capture_bo(err++, vma);
        }
 
@@ -1230,7 +1230,7 @@ static void i915_gem_capture_vm(struct drm_i915_private *dev_priv,
 
        list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
                list_for_each_entry(vma, &obj->vma_list, obj_link)
-                       if (vma->vm == vm && vma->pin_count > 0)
+                       if (vma->vm == vm && i915_vma_is_pinned(vma))
                                i++;
        }
        error->pinned_bo_count[ndx] = i - error->active_bo_count[ndx];