Re: [PATCH] drm/i915: Don't list gens one by bone in the VMA creation function

Daniel Vetter
2014-01-10T17:31:32Z

On Fri, Jan 10, 2014 at 09:16:39AM -0800, Ben Widawsky wrote:
> On Fri, Jan 10, 2014 at 06:09:15PM +0100, Daniel Vetter wrote:
> > On Fri, Jan 10, 2014 at 03:47:52PM +0000, Damien Lespiau wrote:
> > > There are only two cases here, pre and post SNB (PPGTT).
> > >
> > > Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
> > > ---
> > > drivers/gpu/drm/i915/i915_gem_gtt.c | 14 ++------------
> > > 1 file changed, 2 insertions(+), 12 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> > > index 3192089..866ca90 100644
> > > --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> > > +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> > > @@ -1795,10 +1795,7 @@ static struct i915_vma *__i915_gem_vma_create(struct drm_i915_gem_object *obj,
> > > vma->vm = vm;
> > > vma->obj = obj;
> > >
> > > - switch (INTEL_INFO(vm->dev)->gen) {
> > > - case 8:
> > > - case 7:
> > > - case 6:
> > > + if (INTEL_INFO(vm->dev)->gen >= 6) {
> > > if (i915_is_ggtt(vm)) {
> > > vma->unbind_vma = ggtt_unbind_vma;
> > > vma->bind_vma = ggtt_bind_vma;
> >
> > Imo we should move the ->bind/unbind_vma functions into the global
> > dev_prive->gt vtable - The personality we set here neither changes with
> > the vma, the address space but the hw generation. So I'll reject this
> > cleanup as not going far enough ;-)
> > -Daniel
>
> Actually, it was wrong to begin with anyway. gen6 shouldn't have PPGTT
> functions.

If you want to go this far you can coalesce much more. _Everyone_ whether
ppgtt or ggtt can use the same functions, which just call the insert/clear
entries of the right vm. The exception is gen6 which needs to bind
according to flags.

All the few remaining checks for has_*_mapping we still have splattered
over the code can be garbage-collected and converted to unconditional
calls to ->vma_bind with the right flags set, since vma_bind will
short-circuit correctly on gen6 (and not care anywhere else really).
-Daniel

>
> >
> > > @@ -1806,17 +1803,10 @@ static struct i915_vma *__i915_gem_vma_create(struct drm_i915_gem_object *obj,
> > > vma->unbind_vma = ppgtt_unbind_vma;
> > > vma->bind_vma = ppgtt_bind_vma;
> > > }
> > > - break;
> > > - case 5:
> > > - case 4:
> > > - case 3:
> > > - case 2:
> > > + } else {
> > > BUG_ON(!i915_is_ggtt(vm));
> > > vma->unbind_vma = i915_ggtt_unbind_vma;
> > > vma->bind_vma = i915_ggtt_bind_vma;
> > > - break;
> > > - default:
> > > - BUG();
> > > }
> > >
> > > /* Keep GGTT vmas first to make debug easier */
> > > --
> > > 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
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Ben Widawsky, Intel Open Source Technology Center