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 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx