[Intel-gfx] [PATCH] drm/i915: Use the new vm [un]bind functions

Ben Widawsky ben at bwidawsk.net
Fri Sep 20 23:08:34 CEST 2013


On Fri, Sep 20, 2013 at 09:55:51PM +0100, Chris Wilson wrote:
> On Fri, Sep 20, 2013 at 01:44:23PM -0700, Ben Widawsky wrote:
> > On Fri, Sep 20, 2013 at 11:43:48AM +0100, Chris Wilson wrote:
> > > On Thu, Sep 19, 2013 at 09:06:39PM -0700, Ben Widawsky wrote:
> > > > @@ -1117,8 +1114,25 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
> > > >  	 * batch" bit. Hence we need to pin secure batches into the global gtt.
> > > >  	 * hsw should have this fixed, but let's be paranoid and do it
> > > >  	 * unconditionally for now. */
> > > > -	if (flags & I915_DISPATCH_SECURE && !batch_obj->has_global_gtt_mapping)
> > > > -		i915_gem_gtt_bind_object(batch_obj, batch_obj->cache_level);
> > > > +	if (flags & I915_DISPATCH_SECURE) {
> > > > +		struct i915_address_space *ggtt = obj_to_ggtt(batch_obj);
> > > > +		/* Assuming all privileged batches are in the global GTT means
> > > > +		 * we need to make sure we have a global gtt offset, as well as
> > > > +		 * the PTEs mapped. As mentioned above, we can forego this on
> > > > +		 * HSW, but don't.
> > > > +		 */
> > > > +		ret = i915_gem_object_bind_to_vm(batch_obj, ggtt, 0, false,
> > > > +						 false);
> > > > +		if (ret)
> > > > +			goto err;
> > > 
> > > bind_to_vm() has unwanted side-effects here - notably always allocating
> > > a node and corrupting lists.
> > > 
> > > Just pin, ggtt->bind_vma, unpin. Hmmm, except that we also need a
> > > move_to_active (as we are not presuming vm == ggtt).
> > > 
> > > pin, ggtt->bind_vma, move_to_active(ggtt), unpin.
> > > 
> > > And then hope we have the correct flushes in place for that to be
> > > retired if nothing else is going on with that ggtt.
> > 
> > Yes, you're right, and a particular nice catch on the move to active; I
> > completely forgot. I think ggtt->bind_vma is redundant though. Shouldn't
> > it just be:
> > pin, move_to_active, unpin?
> 
> Since we will ask for a !map_and_fenceable pin, pin() will not
> automatically bind into the global GTT, so I think we still need the
> ggtt->bind_vma().
> 
pin gets passed a VM, which will be GGTT.
>  
> > Furthermore, the actually pinning (pin count increment) should be
> > unnecessary, but I assume you were just trying to save me some typing.
> 
> Yes, the pin-count adjustments should be unnecessary - but not a huge
> burden, and I was thinking it may help in the future as we may want to
> explicitly hold the pin until move-to-active for all objects. That
> future being where we strive to reduce hold times on struct_mutex.
> -Chris
> 
> -- 
> Chris Wilson, Intel Open Source Technology Centre

-- 
Ben Widawsky, Intel Open Source Technology Center



More information about the Intel-gfx mailing list