> -----Original Message----- > From: Intel-gfx [mailto:intel-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx] On Behalf > Of Ville Syrjälä > Sent: Thursday, July 31, 2014 5:16 PM > To: Daniel Vetter > Cc: Intel Graphics Development > Subject: Re: [PATCH 5/7] drm/i915: Initialize the aliasing ppgtt as > part of global gtt > > On Wed, Jul 30, 2014 at 09:42:02PM +0200, Daniel Vetter wrote: > > Stuffing this into the context setup code doesn't make a lot of sense. > > Also reusing the real ppgtt setup code makes even less sense since the > > aliasing ppgtt isn't a real address space. Leaving all that stuff > > unitialized will make sure that we catch any abusers promptly. > > > > This is also a prep work to clean up the context->ppgtt link. > > > > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > > --- > > drivers/gpu/drm/i915/i915_gem_context.c | 13 +------------ > > drivers/gpu/drm/i915/i915_gem_gtt.c | 31 > +++++++++++++++++++++++++------ > > 2 files changed, 26 insertions(+), 18 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/i915_gem_context.c > b/drivers/gpu/drm/i915/i915_gem_context.c > > index 3b8367aa8404..7a455fcee3a7 100644 > > --- a/drivers/gpu/drm/i915/i915_gem_context.c > > +++ b/drivers/gpu/drm/i915/i915_gem_context.c > > @@ -276,17 +276,6 @@ i915_gem_create_context(struct drm_device > *dev, > > goto err_unpin; > > } else > > ctx->vm = &ppgtt->base; > > - > > - /* This case is reserved for the global default context and > > - * should only happen once. */ > > - if (is_global_default_ctx) { > > - if (WARN_ON(dev_priv->mm.aliasing_ppgtt)) { > > - ret = -EEXIST; > > - goto err_unpin; > > - } > > - > > - dev_priv->mm.aliasing_ppgtt = ppgtt; > > - } > > } else if (USES_PPGTT(dev)) { > > /* For platforms which only have aliasing PPGTT, we fake the > > * address space and refcounting. */ > > @@ -361,7 +350,7 @@ int i915_gem_context_init(struct drm_device *dev) > > } > > } > > > > - ctx = i915_gem_create_context(dev, NULL, USES_PPGTT(dev)); > > + ctx = i915_gem_create_context(dev, NULL, > USES_FULL_PPGTT(dev)); > > if (IS_ERR(ctx)) { > > DRM_ERROR("Failed to create default global context (error > %ld)\n", > > PTR_ERR(ctx)); > > diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c > b/drivers/gpu/drm/i915/i915_gem_gtt.c > > index 4fa7807ed4d5..cb9bb13ff20a 100644 > > --- a/drivers/gpu/drm/i915/i915_gem_gtt.c > > +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c > > @@ -1191,23 +1191,27 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt > *ppgtt) > > return 0; > > } > > > > -int i915_ppgtt_init(struct drm_device *dev, struct i915_hw_ppgtt *ppgtt) > > +int __hw_ppgtt_init(struct drm_device *dev, struct i915_hw_ppgtt > *ppgtt) > > { > > struct drm_i915_private *dev_priv = dev->dev_private; > > - int ret = 0; > > > > ppgtt->base.dev = dev; > > ppgtt->base.scratch = dev_priv->gtt.base.scratch; > > > > if (INTEL_INFO(dev)->gen < 8) > > - ret = gen6_ppgtt_init(ppgtt); > > + return gen6_ppgtt_init(ppgtt); > > else if (IS_GEN8(dev)) > > - ret = gen8_ppgtt_init(ppgtt, dev_priv->gtt.base.total); > > + return gen8_ppgtt_init(ppgtt, dev_priv->gtt.base.total); > > else > > BUG(); > > +} > > +int i915_ppgtt_init(struct drm_device *dev, struct i915_hw_ppgtt *ppgtt) > > +{ > > + struct drm_i915_private *dev_priv = dev->dev_private; > > + int ret = 0; > > > > + ret = __hw_ppgtt_init(dev, ppgtt); > > if (!ret) { > > - struct drm_i915_private *dev_priv = dev->dev_private; > > kref_init(&ppgtt->ref); > > drm_mm_init(&ppgtt->base.mm, ppgtt->base.start, > > ppgtt->base.total); > > @@ -1728,6 +1732,7 @@ int i915_gem_setup_global_gtt(struct > drm_device *dev, > > struct drm_mm_node *entry; > > struct drm_i915_gem_object *obj; > > unsigned long hole_start, hole_end; > > + int ret; > > > > BUG_ON(mappable_end > end); > > > > @@ -1739,7 +1744,7 @@ int i915_gem_setup_global_gtt(struct > drm_device *dev, > > /* Mark any preallocated objects as occupied */ > > list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) { > > struct i915_vma *vma = i915_gem_obj_to_vma(obj, > ggtt_vm); > > - int ret; > > + > > DRM_DEBUG_KMS("reserving preallocated space: %lx + > %zx\n", > > i915_gem_obj_ggtt_offset(obj), obj->base.size); > > > > @@ -1766,6 +1771,20 @@ int i915_gem_setup_global_gtt(struct > drm_device *dev, > > /* And finally clear the reserved guard page */ > > ggtt_vm->clear_range(ggtt_vm, end - PAGE_SIZE, PAGE_SIZE, true); > > > > + if (HAS_ALIASING_PPGTT(dev) && USES_FULL_PPGTT(dev)) { > > Should that be !USES_FULL_PPGTT ? I think we need this for aliasing & full ppgtt (the global default ctx)... so it should be USES_PPGTT. > > > + struct i915_hw_ppgtt *ppgtt; > > + > > + ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL); > > + if (!ppgtt) > > + return -ENOMEM; > > + > > + ret = __hw_ppgtt_init(dev, ppgtt); > > + if (!ret) > > + return ret; > > + > > + dev_priv->mm.aliasing_ppgtt = ppgtt; > > + } > > + > > return 0; > > } > > > > -- > > 1.9.3 > > > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > > http://lists.freedesktop.org/mailman/listinfo/intel-gfx > > -- > Ville Syrjälä > Intel OTC > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Attachment:
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx