[Intel-gfx] [PATCH 4/6] drm/i915: Add bind/unbind object functions to VM

Chris Wilson chris at chris-wilson.co.uk
Mon Sep 16 11:25:28 CEST 2013


On Sat, Sep 14, 2013 at 03:03:17PM -0700, Ben Widawsky wrote:
> +static void gen6_ggtt_bind_vma(struct i915_vma *vma,
> +			       enum i915_cache_level cache_level,
> +			       u32 flags)
> +{
> +	struct drm_device *dev = vma->vm->dev;
> +	struct drm_i915_private *dev_priv = dev->dev_private;
> +	struct drm_i915_gem_object *obj = vma->obj;
> +	const unsigned long entry = vma->node.start >> PAGE_SHIFT;
> +
> +	/* If there is an aliasing PPGTT, and the user didn't explicitly ask for
> +	 * the global, just use aliasing */
> +	if (!dev_priv->mm.aliasing_ppgtt || flags & GLOBAL_BIND) {
> +		/* If the object is unbound, or we're change the cache bits */
> +		if (!obj->has_global_gtt_mapping ||
> +		    (cache_level != obj->cache_level)) {
> +			gen6_ggtt_insert_entries(vma->vm, obj->pages, entry,
> +						 cache_level);
> +			obj->has_global_gtt_mapping = 1;
> +		}
> +	}
> +
> +	/* If put the mapping in the aliasing PPGTT as well as Global if we have
> +	 * aliasing, but the user requested global. */

Why? As a proponent of full-ppgtt I thought you would be envisoning a
future where the aliasing_ppgtt was used far less (i.e. never), and the
ggtt would only continue to be used for the truly global entries such as
scanouts, contexts, pdes, execlists etc.

> +	if (dev_priv->mm.aliasing_ppgtt &&
> +	    (!obj->has_aliasing_ppgtt_mapping ||
> +	     (cache_level != obj->cache_level))) {
> +		gen6_ppgtt_insert_entries(&dev_priv->mm.aliasing_ppgtt->base,
> +					  vma->obj->pages, entry, cache_level);
> +		vma->obj->has_aliasing_ppgtt_mapping = 1;
> +	}
> +}

-- 
Chris Wilson, Intel Open Source Technology Centre



More information about the Intel-gfx mailing list