All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Ben Widawsky <ben@bwidawsk.net>
Cc: Intel GFX <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 26/66] drm/i915: Move active/inactive lists to new mm
Date: Tue, 2 Jul 2013 09:26:45 +0200	[thread overview]
Message-ID: <20130702072645.GG18285@phenom.ffwll.local> (raw)
In-Reply-To: <20130701225650.GK4242@bwidawsk.net>

On Mon, Jul 01, 2013 at 03:56:50PM -0700, Ben Widawsky wrote:
> On Sun, Jun 30, 2013 at 05:38:16PM +0200, Daniel Vetter wrote:
> > On Thu, Jun 27, 2013 at 04:30:27PM -0700, Ben Widawsky wrote:
> > > for file in `ls drivers/gpu/drm/i915/*.c` ; do sed -i "s/dev_priv->mm.inactive_list/i915_gtt_mm-\>inactive_list/" $file; done
> > > for file in `ls drivers/gpu/drm/i915/*.c` ; do sed -i "s/dev_priv->mm.active_list/i915_gtt_mm-\>active_list/" $file; done
> > > 
> > > I've also opted to move the comments out of line a bit so one can get a
> > > better picture of what the various lists do.
> > 
> > Bikeshed: That makes you now inconsistent with all the other in-detail
> > structure memeber comments we have. And I don't see how it looks better,
> > so I'd vote to keep things as-is with per-member comments.
> >
> Initially I moved all the comments (in the original mm destruction I
> did).

I mean to keep the per-struct-member comments right next to each
individual declaration.

> > > v2: Leave the bound list as a global one. (Chris, indirectly)
> > > 
> > > CC: Chris Wilson <chris@chris-wilson.co.uk>
> > > Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
> > 
> > The real comment though is on the commit message, it fails to explain why
> > we want to move the active/inactive lists from mm/obj to the address
> > space/vma pair. I think I understand, but this should be explained more
> > in-depth.
> > 
> > I think in the first commit which starts moving those lists and execution
> > tracking state you should also mention why some of the state
> > (bound/unbound lists e.g.) are not moved.
> > 
> > Cheers, Daniel
> 
> Can I use, "because Chris told me to"? :p

I think some high-level explanation should be doable ;-) E.g. when moving
the lists around explain that the active/inactive stuff is used by
eviction when we run out of address space, so needs to be per-vma and
per-address space. Bound/unbound otoh is used by the shrinker which only
cares about the amount of memory used and not one bit about in which
address space this memory is all used in. Of course to actual kick out an
object we need to unbind it from every address space, but for that we have
the per-object list of vmas.
-Daniel

> 
> > 
> > > ---
> > >  drivers/gpu/drm/i915/i915_debugfs.c    | 11 ++++----
> > >  drivers/gpu/drm/i915/i915_drv.h        | 49 ++++++++++++++--------------------
> > >  drivers/gpu/drm/i915/i915_gem.c        | 24 +++++++----------
> > >  drivers/gpu/drm/i915/i915_gem_debug.c  |  2 +-
> > >  drivers/gpu/drm/i915/i915_gem_evict.c  | 10 +++----
> > >  drivers/gpu/drm/i915/i915_gem_stolen.c |  2 +-
> > >  drivers/gpu/drm/i915/i915_irq.c        |  6 ++---
> > >  7 files changed, 46 insertions(+), 58 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> > > index f3c76ab..a0babc7 100644
> > > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > > @@ -158,11 +158,11 @@ static int i915_gem_object_list_info(struct seq_file *m, void *data)
> > >  	switch (list) {
> > >  	case ACTIVE_LIST:
> > >  		seq_printf(m, "Active:\n");
> > > -		head = &dev_priv->mm.active_list;
> > > +		head = &i915_gtt_vm->active_list;
> > >  		break;
> > >  	case INACTIVE_LIST:
> > >  		seq_printf(m, "Inactive:\n");
> > > -		head = &dev_priv->mm.inactive_list;
> > > +		head = &i915_gtt_vm->inactive_list;
> > >  		break;
> > >  	default:
> > >  		mutex_unlock(&dev->struct_mutex);
> > > @@ -247,12 +247,12 @@ static int i915_gem_object_info(struct seq_file *m, void* data)
> > >  		   count, mappable_count, size, mappable_size);
> > >  
> > >  	size = count = mappable_size = mappable_count = 0;
> > > -	count_objects(&dev_priv->mm.active_list, mm_list);
> > > +	count_objects(&i915_gtt_vm->active_list, mm_list);
> > >  	seq_printf(m, "  %u [%u] active objects, %zu [%zu] bytes\n",
> > >  		   count, mappable_count, size, mappable_size);
> > >  
> > >  	size = count = mappable_size = mappable_count = 0;
> > > -	count_objects(&dev_priv->mm.inactive_list, mm_list);
> > > +	count_objects(&i915_gtt_vm->inactive_list, mm_list);
> > >  	seq_printf(m, "  %u [%u] inactive objects, %zu [%zu] bytes\n",
> > >  		   count, mappable_count, size, mappable_size);
> > >  
> > > @@ -1977,7 +1977,8 @@ i915_drop_caches_set(void *data, u64 val)
> > >  		i915_gem_retire_requests(dev);
> > >  
> > >  	if (val & DROP_BOUND) {
> > > -		list_for_each_entry_safe(obj, next, &dev_priv->mm.inactive_list, mm_list)
> > > +		list_for_each_entry_safe(obj, next, &i915_gtt_vm->inactive_list,
> > > +					 mm_list)
> > >  			if (obj->pin_count == 0) {
> > >  				ret = i915_gem_object_unbind(obj);
> > >  				if (ret)
> > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > > index e65cf57..0553410 100644
> > > --- a/drivers/gpu/drm/i915/i915_drv.h
> > > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > > @@ -448,6 +448,22 @@ struct i915_address_space {
> > >  	unsigned long start;		/* Start offset always 0 for dri2 */
> > >  	size_t total;		/* size addr space maps (ex. 2GB for ggtt) */
> > >  
> > > +/* We use many types of lists for object tracking:
> > > + *  active_list: List of objects currently involved in rendering.
> > > + *	Includes buffers having the contents of their GPU caches flushed, not
> > > + *	necessarily primitives. last_rendering_seqno represents when the
> > > + *	rendering involved will be completed. A reference is held on the buffer
> > > + *	while on this list.
> > > + *  inactive_list: LRU list of objects which are not in the ringbuffer
> > > + *	objects are ready to unbind but are still mapped.
> > > + *	last_rendering_seqno is 0 while an object is in this list.
> > > + *	A reference is not held on the buffer while on this list,
> > > + *	as merely being GTT-bound shouldn't prevent its being
> > > + *	freed, and we'll pull it off the list in the free path.
> > > + */
> > > +	struct list_head active_list;
> > > +	struct list_head inactive_list;
> > > +
> > >  	struct {
> > >  		dma_addr_t addr;
> > >  		struct page *page;
> > > @@ -835,42 +851,17 @@ struct intel_l3_parity {
> > >  };
> > >  
> > >  struct i915_gem_mm {
> > > -	/** List of all objects in gtt_space. Used to restore gtt
> > > -	 * mappings on resume */
> > > -	struct list_head bound_list;
> > >  	/**
> > > -	 * List of objects which are not bound to the GTT (thus
> > > -	 * are idle and not used by the GPU) but still have
> > > -	 * (presumably uncached) pages still attached.
> > > +	 * Lists of objects which are [not] bound to a VM. Unbound objects are
> > > +	 * idle are idle but still have (presumably uncached) pages still
> > > +	 * attached.
> > >  	 */
> > > +	struct list_head bound_list;
> > >  	struct list_head unbound_list;
> > >  
> > >  	struct shrinker inactive_shrinker;
> > >  	bool shrinker_no_lock_stealing;
> > >  
> > > -	/**
> > > -	 * List of objects currently involved in rendering.
> > > -	 *
> > > -	 * Includes buffers having the contents of their GPU caches
> > > -	 * flushed, not necessarily primitives.  last_rendering_seqno
> > > -	 * represents when the rendering involved will be completed.
> > > -	 *
> > > -	 * A reference is held on the buffer while on this list.
> > > -	 */
> > > -	struct list_head active_list;
> > > -
> > > -	/**
> > > -	 * LRU list of objects which are not in the ringbuffer and
> > > -	 * are ready to unbind, but are still in the GTT.
> > > -	 *
> > > -	 * last_rendering_seqno is 0 while an object is in this list.
> > > -	 *
> > > -	 * A reference is not held on the buffer while on this list,
> > > -	 * as merely being GTT-bound shouldn't prevent its being
> > > -	 * freed, and we'll pull it off the list in the free path.
> > > -	 */
> > > -	struct list_head inactive_list;
> > > -
> > >  	/** LRU list of objects with fence regs on them. */
> > >  	struct list_head fence_list;
> > >  
> > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> > > index 608b6b5..7da06df 100644
> > > --- a/drivers/gpu/drm/i915/i915_gem.c
> > > +++ b/drivers/gpu/drm/i915/i915_gem.c
> > > @@ -1706,7 +1706,7 @@ __i915_gem_shrink(struct drm_i915_private *dev_priv, long target,
> > >  	}
> > >  
> > >  	list_for_each_entry_safe(obj, next,
> > > -				 &dev_priv->mm.inactive_list,
> > > +				 &i915_gtt_vm->inactive_list,
> > >  				 mm_list) {
> > >  		if ((i915_gem_object_is_purgeable(obj) || !purgeable_only) &&
> > >  		    i915_gem_object_unbind(obj) == 0 &&
> > > @@ -1881,7 +1881,7 @@ i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
> > >  	}
> > >  
> > >  	/* Move from whatever list we were on to the tail of execution. */
> > > -	list_move_tail(&obj->mm_list, &dev_priv->mm.active_list);
> > > +	list_move_tail(&obj->mm_list, &i915_gtt_vm->active_list);
> > >  	list_move_tail(&obj->ring_list, &ring->active_list);
> > >  
> > >  	obj->last_read_seqno = seqno;
> > > @@ -1909,7 +1909,7 @@ i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
> > >  	BUG_ON(obj->base.write_domain & ~I915_GEM_GPU_DOMAINS);
> > >  	BUG_ON(!obj->active);
> > >  
> > > -	list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
> > > +	list_move_tail(&obj->mm_list, &i915_gtt_vm->inactive_list);
> > >  
> > >  	list_del_init(&obj->ring_list);
> > >  	obj->ring = NULL;
> > > @@ -2279,12 +2279,8 @@ bool i915_gem_reset(struct drm_device *dev)
> > >  	/* Move everything out of the GPU domains to ensure we do any
> > >  	 * necessary invalidation upon reuse.
> > >  	 */
> > > -	list_for_each_entry(obj,
> > > -			    &dev_priv->mm.inactive_list,
> > > -			    mm_list)
> > > -	{
> > > +	list_for_each_entry(obj, &i915_gtt_vm->inactive_list, mm_list)
> > >  		obj->base.read_domains &= ~I915_GEM_GPU_DOMAINS;
> > > -	}
> > >  
> > >  	/* The fence registers are invalidated so clear them out */
> > >  	i915_gem_restore_fences(dev);
> > > @@ -3162,7 +3158,7 @@ search_free:
> > >  	}
> > >  
> > >  	list_move_tail(&obj->global_list, &dev_priv->mm.bound_list);
> > > -	list_add_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
> > > +	list_add_tail(&obj->mm_list, &i915_gtt_vm->inactive_list);
> > >  
> > >  	obj->gtt_space = node;
> > >  	obj->gtt_offset = node->start;
> > > @@ -3313,7 +3309,7 @@ i915_gem_object_set_to_gtt_domain(struct drm_i915_gem_object *obj, bool write)
> > >  
> > >  	/* And bump the LRU for this access */
> > >  	if (i915_gem_object_is_inactive(obj))
> > > -		list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
> > > +		list_move_tail(&obj->mm_list, &i915_gtt_vm->inactive_list);
> > >  
> > >  	return 0;
> > >  }
> > > @@ -4291,7 +4287,7 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
> > >  		return ret;
> > >  	}
> > >  
> > > -	BUG_ON(!list_empty(&dev_priv->mm.active_list));
> > > +	BUG_ON(!list_empty(&i915_gtt_vm->active_list));
> > >  	mutex_unlock(&dev->struct_mutex);
> > >  
> > >  	ret = drm_irq_install(dev);
> > > @@ -4352,8 +4348,8 @@ i915_gem_load(struct drm_device *dev)
> > >  				  SLAB_HWCACHE_ALIGN,
> > >  				  NULL);
> > >  
> > > -	INIT_LIST_HEAD(&dev_priv->mm.active_list);
> > > -	INIT_LIST_HEAD(&dev_priv->mm.inactive_list);
> > > +	INIT_LIST_HEAD(&i915_gtt_vm->active_list);
> > > +	INIT_LIST_HEAD(&i915_gtt_vm->inactive_list);
> > >  	INIT_LIST_HEAD(&dev_priv->mm.unbound_list);
> > >  	INIT_LIST_HEAD(&dev_priv->mm.bound_list);
> > >  	INIT_LIST_HEAD(&dev_priv->mm.fence_list);
> > > @@ -4652,7 +4648,7 @@ i915_gem_inactive_shrink(struct shrinker *shrinker, struct shrink_control *sc)
> > >  	list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list)
> > >  		if (obj->pages_pin_count == 0)
> > >  			cnt += obj->base.size >> PAGE_SHIFT;
> > > -	list_for_each_entry(obj, &dev_priv->mm.inactive_list, global_list)
> > > +	list_for_each_entry(obj, &i915_gtt_vm->inactive_list, global_list)
> > >  		if (obj->pin_count == 0 && obj->pages_pin_count == 0)
> > >  			cnt += obj->base.size >> PAGE_SHIFT;
> > >  
> > > diff --git a/drivers/gpu/drm/i915/i915_gem_debug.c b/drivers/gpu/drm/i915/i915_gem_debug.c
> > > index 582e6a5..bf945a3 100644
> > > --- a/drivers/gpu/drm/i915/i915_gem_debug.c
> > > +++ b/drivers/gpu/drm/i915/i915_gem_debug.c
> > > @@ -97,7 +97,7 @@ i915_verify_lists(struct drm_device *dev)
> > >  		}
> > >  	}
> > >  
> > > -	list_for_each_entry(obj, &dev_priv->mm.inactive_list, list) {
> > > +	list_for_each_entry(obj, &i915_gtt_vm->inactive_list, list) {
> > >  		if (obj->base.dev != dev ||
> > >  		    !atomic_read(&obj->base.refcount.refcount)) {
> > >  			DRM_ERROR("freed inactive %p\n", obj);
> > > diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c
> > > index 6e620f86..92856a2 100644
> > > --- a/drivers/gpu/drm/i915/i915_gem_evict.c
> > > +++ b/drivers/gpu/drm/i915/i915_gem_evict.c
> > > @@ -86,7 +86,7 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
> > >  				 cache_level);
> > >  
> > >  	/* First see if there is a large enough contiguous idle region... */
> > > -	list_for_each_entry(obj, &dev_priv->mm.inactive_list, mm_list) {
> > > +	list_for_each_entry(obj, &i915_gtt_vm->inactive_list, mm_list) {
> > >  		if (mark_free(obj, &unwind_list))
> > >  			goto found;
> > >  	}
> > > @@ -95,7 +95,7 @@ i915_gem_evict_something(struct drm_device *dev, int min_size,
> > >  		goto none;
> > >  
> > >  	/* Now merge in the soon-to-be-expired objects... */
> > > -	list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
> > > +	list_for_each_entry(obj, &i915_gtt_vm->active_list, mm_list) {
> > >  		if (mark_free(obj, &unwind_list))
> > >  			goto found;
> > >  	}
> > > @@ -158,8 +158,8 @@ i915_gem_evict_everything(struct drm_device *dev)
> > >  	bool lists_empty;
> > >  	int ret;
> > >  
> > > -	lists_empty = (list_empty(&dev_priv->mm.inactive_list) &&
> > > -		       list_empty(&dev_priv->mm.active_list));
> > > +	lists_empty = (list_empty(&i915_gtt_vm->inactive_list) &&
> > > +		       list_empty(&i915_gtt_vm->active_list));
> > >  	if (lists_empty)
> > >  		return -ENOSPC;
> > >  
> > > @@ -177,7 +177,7 @@ i915_gem_evict_everything(struct drm_device *dev)
> > >  
> > >  	/* Having flushed everything, unbind() should never raise an error */
> > >  	list_for_each_entry_safe(obj, next,
> > > -				 &dev_priv->mm.inactive_list, mm_list)
> > > +				 &i915_gtt_vm->inactive_list, mm_list)
> > >  		if (obj->pin_count == 0)
> > >  			WARN_ON(i915_gem_object_unbind(obj));
> > >  
> > > diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
> > > index 49e8be7..3f6564d 100644
> > > --- a/drivers/gpu/drm/i915/i915_gem_stolen.c
> > > +++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
> > > @@ -384,7 +384,7 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
> > >  	obj->has_global_gtt_mapping = 1;
> > >  
> > >  	list_add_tail(&obj->global_list, &dev_priv->mm.bound_list);
> > > -	list_add_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
> > > +	list_add_tail(&obj->mm_list, &i915_gtt_vm->inactive_list);
> > >  
> > >  	return obj;
> > >  }
> > > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> > > index 1e25920..5dc055a 100644
> > > --- a/drivers/gpu/drm/i915/i915_irq.c
> > > +++ b/drivers/gpu/drm/i915/i915_irq.c
> > > @@ -1722,7 +1722,7 @@ i915_error_first_batchbuffer(struct drm_i915_private *dev_priv,
> > >  	}
> > >  
> > >  	seqno = ring->get_seqno(ring, false);
> > > -	list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
> > > +	list_for_each_entry(obj, &i915_gtt_vm->active_list, mm_list) {
> > >  		if (obj->ring != ring)
> > >  			continue;
> > >  
> > > @@ -1857,7 +1857,7 @@ static void i915_gem_capture_buffers(struct drm_i915_private *dev_priv,
> > >  	int i;
> > >  
> > >  	i = 0;
> > > -	list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list)
> > > +	list_for_each_entry(obj, &i915_gtt_vm->active_list, mm_list)
> > >  		i++;
> > >  	error->active_bo_count = i;
> > >  	list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list)
> > > @@ -1877,7 +1877,7 @@ static void i915_gem_capture_buffers(struct drm_i915_private *dev_priv,
> > >  		error->active_bo_count =
> > >  			capture_active_bo(error->active_bo,
> > >  					  error->active_bo_count,
> > > -					  &dev_priv->mm.active_list);
> > > +					  &i915_gtt_vm->active_list);
> > >  
> > >  	if (error->pinned_bo)
> > >  		error->pinned_bo_count =
> > > -- 
> > > 1.8.3.1
> > > 
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx@lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > 
> > -- 
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > +41 (0) 79 365 57 48 - http://blog.ffwll.ch
> 
> -- 
> Ben Widawsky, Intel Open Source Technology Center

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

  reply	other threads:[~2013-07-02  7:26 UTC|newest]

Thread overview: 124+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-27 23:30 [PATCH 00/66] [v1] Full PPGTT minus soft pin Ben Widawsky
2013-06-27 23:30 ` [PATCH 01/66] drm/i915: Remove extra error state NULL Ben Widawsky
2013-06-27 23:30 ` [PATCH 02/66] drm/i915: Extract error buffer capture Ben Widawsky
2013-06-27 23:30 ` [PATCH 03/66] drm/i915: make PDE|PTE platform specific Ben Widawsky
2013-06-28 16:53   ` Daniel Vetter
2013-06-27 23:30 ` [PATCH 04/66] drm: Optionally create mm blocks from top-to-bottom Ben Widawsky
2013-06-30 12:30   ` Daniel Vetter
2013-06-30 12:40     ` Daniel Vetter
2013-06-27 23:30 ` [PATCH 05/66] drm/i915: Don't clear gtt with 0 entries Ben Widawsky
2013-06-27 23:30 ` [PATCH 06/66] drm/i915: Conditionally use guard page based on PPGTT Ben Widawsky
2013-06-28 17:57   ` Jesse Barnes
2013-06-27 23:30 ` [PATCH 07/66] drm/i915: Use drm_mm for PPGTT PDEs Ben Widawsky
2013-06-28 18:01   ` Jesse Barnes
2013-06-27 23:30 ` [PATCH 08/66] drm/i915: cleanup context fini Ben Widawsky
2013-06-27 23:30 ` [PATCH 09/66] drm/i915: Do a fuller init after reset Ben Widawsky
2013-06-27 23:30 ` [PATCH 10/66] drm/i915: Split context enabling from init Ben Widawsky
2013-06-27 23:30 ` [PATCH 11/66] drm/i915: destroy i915_gem_init_global_gtt Ben Widawsky
2013-06-27 23:30 ` [PATCH 12/66] drm/i915: Embed PPGTT into the context Ben Widawsky
2013-06-27 23:30 ` [PATCH 13/66] drm/i915: Unify PPGTT codepaths on gen6+ Ben Widawsky
2013-06-27 23:30 ` [PATCH 14/66] drm/i915: Move ppgtt initialization down Ben Widawsky
2013-06-27 23:30 ` [PATCH 15/66] drm/i915: Tie context to PPGTT Ben Widawsky
2013-06-27 23:30 ` [PATCH 16/66] drm/i915: Really share scratch page Ben Widawsky
2013-06-27 23:30 ` [PATCH 17/66] drm/i915: Combine scratch members into a struct Ben Widawsky
2013-06-27 23:30 ` [PATCH 18/66] drm/i915: Drop dev from pte_encode Ben Widawsky
2013-06-27 23:30 ` [PATCH 19/66] drm/i915: Use gtt shortform where possible Ben Widawsky
2013-06-27 23:30 ` [PATCH 20/66] drm/i915: Move fbc members out of line Ben Widawsky
2013-06-30 13:10   ` Daniel Vetter
2013-06-27 23:30 ` [PATCH 21/66] drm/i915: Move gtt and ppgtt under address space umbrella Ben Widawsky
2013-06-30 13:12   ` Daniel Vetter
2013-07-01 18:40     ` Ben Widawsky
2013-07-01 18:48       ` Daniel Vetter
2013-06-27 23:30 ` [PATCH 22/66] drm/i915: Move gtt_mtrr to i915_gtt Ben Widawsky
2013-06-27 23:30 ` [PATCH 23/66] drm/i915: Move stolen stuff " Ben Widawsky
2013-06-30 13:18   ` Daniel Vetter
2013-07-01 18:43     ` Ben Widawsky
2013-07-01 18:51       ` Daniel Vetter
2013-06-27 23:30 ` [PATCH 24/66] drm/i915: Move aliasing_ppgtt Ben Widawsky
2013-06-30 13:27   ` Daniel Vetter
2013-07-01 18:52     ` Ben Widawsky
2013-07-01 19:06       ` Daniel Vetter
2013-07-01 19:48         ` Ben Widawsky
2013-07-01 19:54           ` Daniel Vetter
2013-06-27 23:30 ` [PATCH 25/66] drm/i915: Put the mm in the parent address space Ben Widawsky
2013-06-27 23:30 ` [PATCH 26/66] drm/i915: Move active/inactive lists to new mm Ben Widawsky
2013-06-30 15:38   ` Daniel Vetter
2013-07-01 22:56     ` Ben Widawsky
2013-07-02  7:26       ` Daniel Vetter [this message]
2013-07-02 16:47         ` Ben Widawsky
2013-06-27 23:30 ` [PATCH 27/66] drm/i915: Create a global list of vms Ben Widawsky
2013-06-27 23:30 ` [PATCH 28/66] drm/i915: Remove object's gtt_offset Ben Widawsky
2013-06-27 23:30 ` [PATCH 29/66] drm: pre allocate node for create_block Ben Widawsky
2013-06-30 12:34   ` Daniel Vetter
2013-07-01 18:30     ` Ben Widawsky
2013-06-27 23:30 ` [PATCH 30/66] drm/i915: Getter/setter for object attributes Ben Widawsky
2013-06-30 13:00   ` Daniel Vetter
2013-07-01 18:32     ` Ben Widawsky
2013-07-01 18:43       ` Daniel Vetter
2013-07-01 19:08         ` Daniel Vetter
2013-07-01 22:59           ` Ben Widawsky
2013-07-02  7:28             ` Daniel Vetter
2013-07-02 16:51               ` Ben Widawsky
2013-07-02 17:07                 ` Daniel Vetter
2013-06-27 23:30 ` [PATCH 31/66] drm/i915: Create VMAs (part 1) Ben Widawsky
2013-06-27 23:30 ` [PATCH 32/66] drm/i915: Create VMAs (part 2) - kill gtt space Ben Widawsky
2013-06-27 23:30 ` [PATCH 33/66] drm/i915: Create VMAs (part 3) - plumbing Ben Widawsky
2013-06-27 23:30 ` [PATCH 34/66] drm/i915: Create VMAs (part 3.5) - map and fenceable tracking Ben Widawsky
2013-06-27 23:30 ` [PATCH 35/66] drm/i915: Create VMAs (part 4) - Error capture Ben Widawsky
2013-06-27 23:30 ` [PATCH 36/66] drm/i915: Create VMAs (part 5) - move mm_list Ben Widawsky
2013-06-27 23:30 ` [PATCH 37/66] drm/i915: Create VMAs (part 6) - finish error plumbing Ben Widawsky
2013-06-27 23:30 ` [PATCH 38/66] drm/i915: create an object_is_active() Ben Widawsky
2013-06-27 23:30 ` [PATCH 39/66] drm/i915: Move active to vma Ben Widawsky
2013-06-27 23:30 ` [PATCH 40/66] drm/i915: Track all VMAs per VM Ben Widawsky
2013-06-30 15:35   ` Daniel Vetter
2013-07-01 19:04     ` Ben Widawsky
2013-06-27 23:30 ` [PATCH 41/66] drm/i915: Defer request freeing Ben Widawsky
2013-06-27 23:30 ` [PATCH 42/66] drm/i915: Clean up VMAs before freeing Ben Widawsky
2013-07-02 10:59   ` Ville Syrjälä
2013-07-02 16:58     ` Ben Widawsky
2013-06-27 23:30 ` [PATCH 43/66] drm/i915: Replace has_bsd/blt with a mask Ben Widawsky
2013-06-27 23:30 ` [PATCH 44/66] drm/i915: Catch missed context unref earlier Ben Widawsky
2013-06-27 23:30 ` [PATCH 45/66] drm/i915: Add a context open function Ben Widawsky
2013-06-27 23:30 ` [PATCH 46/66] drm/i915: Permit contexts on all rings Ben Widawsky
2013-06-27 23:30 ` [PATCH 47/66] drm/i915: Fix context fini refcounts Ben Widawsky
2013-06-27 23:30 ` [PATCH 48/66] drm/i915: Better reset handling for contexts Ben Widawsky
2013-06-27 23:30 ` [PATCH 49/66] drm/i915: Create a per file_priv default context Ben Widawsky
2013-06-27 23:30 ` [PATCH 50/66] drm/i915: Remove ring specificity from contexts Ben Widawsky
2013-06-27 23:30 ` [PATCH 51/66] drm/i915: Track which ring a context ran on Ben Widawsky
2013-06-27 23:30 ` [PATCH 52/66] drm/i915: dump error state based on capture Ben Widawsky
2013-06-27 23:30 ` [PATCH 53/66] drm/i915: PPGTT should take a ppgtt argument Ben Widawsky
2013-06-27 23:30 ` [PATCH 54/66] drm/i915: USE LRI for switching PP_DIR_BASE Ben Widawsky
2013-06-27 23:30 ` [PATCH 55/66] drm/i915: Extract mm switching to function Ben Widawsky
2013-06-27 23:30 ` [PATCH 56/66] drm/i915: Write PDEs at init instead of enable Ben Widawsky
2013-06-27 23:30 ` [PATCH 57/66] drm/i915: Disallow pin with full ppgtt Ben Widawsky
2013-06-28  8:55   ` Chris Wilson
2013-06-29  5:43     ` Ben Widawsky
2013-06-29  6:44       ` Chris Wilson
2013-06-29 14:34         ` Daniel Vetter
2013-06-30  6:56           ` Ben Widawsky
2013-06-30 11:06             ` Daniel Vetter
2013-06-30 11:31               ` Chris Wilson
2013-06-30 11:36                 ` Daniel Vetter
2013-07-01 18:27                   ` Ben Widawsky
2013-06-27 23:30 ` [PATCH 58/66] drm/i915: Get context early in execbuf Ben Widawsky
2013-06-27 23:31 ` [PATCH 59/66] drm/i915: Pass ctx directly to switch/hangstat Ben Widawsky
2013-06-27 23:31 ` [PATCH 60/66] drm/i915: Actually add the new address spaces Ben Widawsky
2013-06-27 23:31 ` [PATCH 61/66] drm/i915: Use multiple VMs Ben Widawsky
2013-06-27 23:43   ` Ben Widawsky
2013-07-02 10:58     ` Ville Syrjälä
2013-07-02 11:07       ` Chris Wilson
2013-07-02 11:34         ` Ville Syrjälä
2013-07-02 11:38           ` Chris Wilson
2013-07-02 12:34             ` Daniel Vetter
2013-06-27 23:31 ` [PATCH 62/66] drm/i915: Kill now unused ppgtt_{un, }bind Ben Widawsky
2013-06-27 23:31 ` [PATCH 63/66] drm/i915: Add PPGTT dumper Ben Widawsky
2013-06-27 23:31 ` [PATCH 64/66] drm/i915: Dump all ppgtt Ben Widawsky
2013-06-27 23:31 ` [PATCH 65/66] drm/i915: Add debugfs for vma info per vm Ben Widawsky
2013-06-27 23:31 ` [PATCH 66/66] drm/i915: Getparam full ppgtt Ben Widawsky
2013-06-28  3:38 ` [PATCH 00/66] [v1] Full PPGTT minus soft pin Ben Widawsky
2013-07-01 21:39 ` Daniel Vetter
2013-07-01 22:36   ` Ben Widawsky
2013-07-02  7:43     ` Daniel Vetter
2013-10-29 23:08   ` Eric Anholt
2013-10-30  0:10     ` Jesse Barnes
2013-11-01 17:20       ` Jesse Barnes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130702072645.GG18285@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=ben@bwidawsk.net \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.