drm/i915: Rename some warts in the VMA API
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 16 Jan 2017 15:21:28 +0000 (15:21 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 19 Jan 2017 10:15:26 +0000 (10:15 +0000)
Whilst writing testcases to exercise the VMA API, some oddities came to
light, such as i915_gem_obj_lookup_or_create(). Joonas suggested
i915_vma_instance() as a neat replacement, so rename them, move them to
i915_vma.c and add some kerneldoc as a sugary bonus.

s/i915_gem_obj_to_vma/i915_vma_lookup/
s/i915_gem_obj_lookup_or_create_vma/i915_vma_instance/

Suggested-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170116152131.18089-2-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_gem_execbuffer.c
drivers/gpu/drm/i915/i915_gem_gtt.c
drivers/gpu/drm/i915/i915_gem_stolen.c
drivers/gpu/drm/i915/i915_vma.c
drivers/gpu/drm/i915/i915_vma.h

index b67f419ffba6aab22067b39d303ff141005b5adf..566adcc8a0eb2904b2624fc5fd6e01d172b02dd3 100644 (file)
@@ -3374,16 +3374,6 @@ struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev,
 struct dma_buf *i915_gem_prime_export(struct drm_device *dev,
                                struct drm_gem_object *gem_obj, int flags);
 
-struct i915_vma *
-i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
-                    struct i915_address_space *vm,
-                    const struct i915_ggtt_view *view);
-
-struct i915_vma *
-i915_gem_obj_lookup_or_create_vma(struct drm_i915_gem_object *obj,
-                                 struct i915_address_space *vm,
-                                 const struct i915_ggtt_view *view);
-
 static inline struct i915_hw_ppgtt *
 i915_vm_to_ppgtt(struct i915_address_space *vm)
 {
@@ -3394,7 +3384,7 @@ static inline struct i915_vma *
 i915_gem_object_to_ggtt(struct drm_i915_gem_object *obj,
                        const struct i915_ggtt_view *view)
 {
-       return i915_gem_obj_to_vma(obj, &to_i915(obj->base.dev)->ggtt.base, view);
+       return i915_vma_lookup(obj, &to_i915(obj->base.dev)->ggtt.base, view);
 }
 
 /* i915_gem_fence_reg.c */
index d6ec63997ca3ad9bb6c38831f391b730b4be3e51..b2f8ac1386a28fe7ea684c3abcae2957ac7e2585 100644 (file)
@@ -3679,7 +3679,7 @@ i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
 
        lockdep_assert_held(&obj->base.dev->struct_mutex);
 
-       vma = i915_gem_obj_lookup_or_create_vma(obj, vm, view);
+       vma = i915_vma_instance(obj, vm, view);
        if (IS_ERR(vma))
                return vma;
 
index 259fe4aa8d41b0b3a9d5e6e4a6226c360589fd8d..c66e90571031de456df9303818f10fcbf3e210c9 100644 (file)
@@ -184,7 +184,7 @@ eb_lookup_vmas(struct eb_vmas *eb,
                 * from the (obj, vm) we don't run the risk of creating
                 * duplicated vmas for the same vm.
                 */
-               vma = i915_gem_obj_lookup_or_create_vma(obj, vm, NULL);
+               vma = i915_vma_instance(obj, vm, NULL);
                if (unlikely(IS_ERR(vma))) {
                        DRM_DEBUG("Failed to lookup VMA\n");
                        ret = PTR_ERR(vma);
index 64f241bffc80a2bae1d4280a21ae26cba4f0a855..e808aad203d82f7e0f48fc8667d0fa6b456a21db 100644 (file)
@@ -3362,51 +3362,6 @@ void i915_gem_restore_gtt_mappings(struct drm_i915_private *dev_priv)
        i915_ggtt_invalidate(dev_priv);
 }
 
-struct i915_vma *
-i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
-                   struct i915_address_space *vm,
-                   const struct i915_ggtt_view *view)
-{
-       struct rb_node *rb;
-
-       rb = obj->vma_tree.rb_node;
-       while (rb) {
-               struct i915_vma *vma = rb_entry(rb, struct i915_vma, obj_node);
-               long cmp;
-
-               cmp = i915_vma_compare(vma, vm, view);
-               if (cmp == 0)
-                       return vma;
-
-               if (cmp < 0)
-                       rb = rb->rb_right;
-               else
-                       rb = rb->rb_left;
-       }
-
-       return NULL;
-}
-
-struct i915_vma *
-i915_gem_obj_lookup_or_create_vma(struct drm_i915_gem_object *obj,
-                                 struct i915_address_space *vm,
-                                 const struct i915_ggtt_view *view)
-{
-       struct i915_vma *vma;
-
-       lockdep_assert_held(&obj->base.dev->struct_mutex);
-       GEM_BUG_ON(view && !i915_is_ggtt(vm));
-
-       vma = i915_gem_obj_to_vma(obj, vm, view);
-       if (!vma) {
-               vma = i915_vma_create(obj, vm, view);
-               GEM_BUG_ON(vma != i915_gem_obj_to_vma(obj, vm, view));
-       }
-
-       GEM_BUG_ON(i915_vma_is_closed(vma));
-       return vma;
-}
-
 static struct scatterlist *
 rotate_pages(const dma_addr_t *in, unsigned int offset,
             unsigned int width, unsigned int height,
index 52dbb9bab2687cfe2c94407555b9c7f9629e874b..61cc0fcae3d82ac163b9eda7fc1c591d7151189f 100644 (file)
@@ -683,7 +683,7 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *dev_priv
        if (ret)
                goto err;
 
-       vma = i915_gem_obj_lookup_or_create_vma(obj, &ggtt->base, NULL);
+       vma = i915_vma_instance(obj, &ggtt->base, NULL);
        if (IS_ERR(vma)) {
                ret = PTR_ERR(vma);
                goto err_pages;
index fe93ed1e012f343a04cde5bf7c13891876bb257e..87273b0137ec830e46b252dfff849609d5d8f882 100644 (file)
@@ -146,6 +146,59 @@ __i915_vma_create(struct drm_i915_gem_object *obj,
        return vma;
 }
 
+/**
+ * i915_vma_lookup - finds a matching VMA
+ * @obj: parent &struct drm_i915_gem_object to be mapped
+ * @vm: address space in which the mapping is located
+ * @view: additional mapping requirements
+ *
+ * i915_vma_lookup() looks up an existing VMA of the @obj in the @vm with
+ * the same @view characteristics.
+ *
+ * Must be called with struct_mutex held.
+ *
+ * Returns the vma if found, or NULL.
+ */
+struct i915_vma *
+i915_vma_lookup(struct drm_i915_gem_object *obj,
+               struct i915_address_space *vm,
+               const struct i915_ggtt_view *view)
+{
+       struct rb_node *rb;
+
+       lockdep_assert_held(&obj->base.dev->struct_mutex);
+
+       rb = obj->vma_tree.rb_node;
+       while (rb) {
+               struct i915_vma *vma = rb_entry(rb, struct i915_vma, obj_node);
+               long cmp;
+
+               cmp = i915_vma_compare(vma, vm, view);
+               if (cmp == 0)
+                       return vma;
+
+               if (cmp < 0)
+                       rb = rb->rb_right;
+               else
+                       rb = rb->rb_left;
+       }
+
+       return NULL;
+}
+
+/**
+ * i915_vma_create - creates a VMA
+ * @obj: parent &struct drm_i915_gem_object to be mapped
+ * @vm: address space in which the mapping is located
+ * @view: additional mapping requirements
+ *
+ * i915_vma_create() allocates a new VMA of the @obj in the @vm with
+ * @view characteristics.
+ *
+ * Must be called with struct_mutex held.
+ *
+ * Returns the vma if found, or an error pointer.
+ */
 struct i915_vma *
 i915_vma_create(struct drm_i915_gem_object *obj,
                struct i915_address_space *vm,
@@ -153,11 +206,46 @@ i915_vma_create(struct drm_i915_gem_object *obj,
 {
        lockdep_assert_held(&obj->base.dev->struct_mutex);
        GEM_BUG_ON(view && !i915_is_ggtt(vm));
-       GEM_BUG_ON(i915_gem_obj_to_vma(obj, vm, view));
+       GEM_BUG_ON(i915_vma_lookup(obj, vm, view));
 
        return __i915_vma_create(obj, vm, view);
 }
 
+/**
+ * i915_vma_instance - return the singleton instance of the VMA
+ * @obj: parent &struct drm_i915_gem_object to be mapped
+ * @vm: address space in which the mapping is located
+ * @view: additional mapping requirements
+ *
+ * i915_vma_instance() looks up an existing VMA of the @obj in the @vm with
+ * the same @view characteristics. If a match is not found, one is created.
+ * Once created, the VMA is kept until either the object is freed, or the
+ * address space is closed.
+ *
+ * Must be called with struct_mutex held.
+ *
+ * Returns the vma, or an error pointer.
+ */
+struct i915_vma *
+i915_vma_instance(struct drm_i915_gem_object *obj,
+                 struct i915_address_space *vm,
+                 const struct i915_ggtt_view *view)
+{
+       struct i915_vma *vma;
+
+       lockdep_assert_held(&obj->base.dev->struct_mutex);
+       GEM_BUG_ON(view && !i915_is_ggtt(vm));
+       GEM_BUG_ON(vm->closed);
+
+       vma = i915_vma_lookup(obj, vm, view);
+       if (!vma)
+               vma = i915_vma_create(obj, vm, view);
+
+       GEM_BUG_ON(!IS_ERR(vma) && i915_vma_is_closed(vma));
+       GEM_BUG_ON(!IS_ERR(vma) && i915_vma_lookup(obj, vm, view) != vma);
+       return vma;
+}
+
 /**
  * i915_vma_bind - Sets up PTEs for an VMA in it's corresponding address space.
  * @vma: VMA to map
index 86b60fb4e95478c71a9be03a488b59092ed0ec81..b3c81190b4a0ccd2cc943778c7a87addab3182a3 100644 (file)
@@ -116,6 +116,16 @@ i915_vma_create(struct drm_i915_gem_object *obj,
                struct i915_address_space *vm,
                const struct i915_ggtt_view *view);
 
+struct i915_vma *
+i915_vma_lookup(struct drm_i915_gem_object *obj,
+               struct i915_address_space *vm,
+               const struct i915_ggtt_view *view);
+
+struct i915_vma *
+i915_vma_instance(struct drm_i915_gem_object *obj,
+                 struct i915_address_space *vm,
+                 const struct i915_ggtt_view *view);
+
 void i915_vma_unpin_and_release(struct i915_vma **p_vma);
 
 static inline bool i915_vma_is_ggtt(const struct i915_vma *vma)