On Tue, Sep 24, 2013 at 09:57:57AM -0700, Ben Widawsky wrote: > "We do fairly often lookup the ggtt vma for an obj." - Chris Wilson. As > such, provide a function to offer slightly cheaper access to the vma. > Not performance tested. By my quick estimation it saves at least 3 > pointer dereferences from the existing mechanism. > > This patch mostly matches code from Chris in > <20130911221430.GB7825@xxxxxxxxxxxxxxxxxxxxxxxxx> > > Reviewed-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Ben Widawsky <ben@xxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_drv.h | 4 +++- > drivers/gpu/drm/i915/i915_gem.c | 17 +++++++++++++++-- > 2 files changed, 18 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index 07de53c..67a31c2 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -2026,6 +2026,9 @@ struct i915_vma *i915_gem_obj_to_vma(struct drm_i915_gem_object *obj, > struct i915_vma * > i915_gem_obj_lookup_or_create_vma(struct drm_i915_gem_object *obj, > struct i915_address_space *vm); > + > +struct i915_vma *i915_gem_obj_to_ggtt(struct drm_i915_gem_object *obj); > + > /* Some GGTT VM helpers */ > #define obj_to_ggtt(obj) \ > (&((struct drm_i915_private *)(obj)->base.dev->dev_private)->gtt.base) > @@ -2062,7 +2065,6 @@ i915_gem_obj_ggtt_pin(struct drm_i915_gem_object *obj, > return i915_gem_object_pin(obj, obj_to_ggtt(obj), alignment, > map_and_fenceable, nonblocking); > } > -#undef obj_to_ggtt Bikeshed police: obj_to_gtt should probably be a static inline function and also might need a bit a prefix now ... -Daniel > > /* i915_gem_context.c */ > void i915_gem_context_init(struct drm_device *dev); > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 8450724..6b134f0 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -3403,8 +3403,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)) { > - struct i915_vma *vma = i915_gem_obj_to_vma(obj, > - &dev_priv->gtt.base); > + struct i915_vma *vma = i915_gem_obj_to_ggtt(obj); > if (vma) > list_move_tail(&vma->mm_list, > &dev_priv->gtt.base.inactive_list); > @@ -4940,3 +4939,17 @@ unsigned long i915_gem_obj_size(struct drm_i915_gem_object *o, > > return 0; > } > + > +struct i915_vma *i915_gem_obj_to_ggtt(struct drm_i915_gem_object *obj) > +{ > + struct i915_vma *vma; > + > + if (WARN_ON(list_empty(&obj->vma_list))) > + return NULL; > + > + vma = list_first_entry(&obj->vma_list, typeof(*vma), vma_link); > + if (WARN_ON(vma->vm != obj_to_ggtt(obj))) > + return NULL; > + > + return vma; > +} > -- > 1.8.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx