drm/i915: Rename some warts in the VMA API
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
This commit is contained in:
		
							parent
							
								
									be1e341513
								
							
						
					
					
						commit
						718659a630
					
				@ -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 */
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user