[Intel-gfx] [PATCH 24/66] drm/i915: Move aliasing_ppgtt
Ben Widawsky
ben at bwidawsk.net
Mon Jul 1 20:52:03 CEST 2013
On Sun, Jun 30, 2013 at 03:27:44PM +0200, Daniel Vetter wrote:
> On Thu, Jun 27, 2013 at 04:30:25PM -0700, Ben Widawsky wrote:
> > for file in `ls drivers/gpu/drm/i915/*.c` ; do
> > sed -i "s/mm.aliasing/gtt.aliasing/" $file;
> > done
>
> Commit message should explain _why_ we do something. Again I'm asking
> since I'm unclear about how things fit all together and what the different
> responsibilities are. I think I understand your design here to make both
> real ppgtt work and keep aliasing ppgtt going, but I'd like you to explain
> this in your words ;-)
That's fair.
>
> One thing which looks a bit peculiar at the end is that struct
> i915_hw_ppgtt is actually used as the real ppgtt object (since it
> subclases i915_address space). My original plan was that we'll add a new
> struct i915_ppgtt {
> struct i915_address_space base;
> struct i915_hw_ppgtt hw_ppgtt;
> }
>
> To fit into your design the alising ppgtt pointer in dev_priv->gtt would
> then only point at a hw_ppgtt struct, not the full deal with address space
> and everything else around attached.
>
> Cheers, Daniel
I don't think creating a struct i915_ppgtt is necessary or buys much. We
can rename i915_hw_ppgtt to i915_ppgtt, and it accomplishes the same
thing. Same for the i915_hw_context for that matter. I wanted to do any
sort of renaming after the rest of the series.
Can you explain why we'd want to keep the hw_ppgtt, and ppgtt with the
track lists etc. distinct?
>
> >
> > Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> > ---
> > drivers/gpu/drm/i915/i915_debugfs.c | 4 ++--
> > drivers/gpu/drm/i915/i915_dma.c | 2 +-
> > drivers/gpu/drm/i915/i915_drv.h | 6 +++---
> > drivers/gpu/drm/i915/i915_gem.c | 12 ++++++------
> > drivers/gpu/drm/i915/i915_gem_context.c | 4 ++--
> > drivers/gpu/drm/i915/i915_gem_execbuffer.c | 4 ++--
> > drivers/gpu/drm/i915/i915_gem_gtt.c | 6 +++---
> > 7 files changed, 19 insertions(+), 19 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> > index c10a690..f3c76ab 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -1816,8 +1816,8 @@ static int i915_ppgtt_info(struct seq_file *m, void *data)
> > seq_printf(m, "PP_DIR_BASE_READ: 0x%08x\n", I915_READ(RING_PP_DIR_BASE_READ(ring)));
> > seq_printf(m, "PP_DIR_DCLV: 0x%08x\n", I915_READ(RING_PP_DIR_DCLV(ring)));
> > }
> > - if (dev_priv->mm.aliasing_ppgtt) {
> > - struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
> > + if (dev_priv->gtt.aliasing_ppgtt) {
> > + struct i915_hw_ppgtt *ppgtt = dev_priv->gtt.aliasing_ppgtt;
> >
> > seq_printf(m, "aliasing PPGTT:\n");
> > seq_printf(m, "pd gtt offset: 0x%08x\n", ppgtt->pd_offset);
> > diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> > index 3535ced..ef00847 100644
> > --- a/drivers/gpu/drm/i915/i915_dma.c
> > +++ b/drivers/gpu/drm/i915/i915_dma.c
> > @@ -977,7 +977,7 @@ static int i915_getparam(struct drm_device *dev, void *data,
> > value = HAS_LLC(dev);
> > break;
> > case I915_PARAM_HAS_ALIASING_PPGTT:
> > - if (intel_enable_ppgtt(dev) && dev_priv->mm.aliasing_ppgtt)
> > + if (intel_enable_ppgtt(dev) && dev_priv->gtt.aliasing_ppgtt)
> > value = 1;
> > break;
> > case I915_PARAM_HAS_WAIT_TIMEOUT:
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index 7016074..0fa7a21 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -482,6 +482,9 @@ struct i915_gtt {
> > struct io_mapping *mappable; /* Mapping to our CPU mappable region */
> > phys_addr_t mappable_base; /* PA of our GMADR */
> >
> > + /** PPGTT used for aliasing the PPGTT with the GTT */
> > + struct i915_hw_ppgtt *aliasing_ppgtt;
> > +
> > /** "Graphics Stolen Memory" holds the global PTEs */
> > void __iomem *gsm;
> >
> > @@ -843,9 +846,6 @@ struct i915_gem_mm {
> > */
> > struct list_head unbound_list;
> >
> > - /** PPGTT used for aliasing the PPGTT with the GTT */
> > - struct i915_hw_ppgtt *aliasing_ppgtt;
> > -
> > struct shrinker inactive_shrinker;
> > bool shrinker_no_lock_stealing;
> >
> > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> > index e31ed47..eb78c5b 100644
> > --- a/drivers/gpu/drm/i915/i915_gem.c
> > +++ b/drivers/gpu/drm/i915/i915_gem.c
> > @@ -2620,7 +2620,7 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj)
> > if (obj->has_global_gtt_mapping)
> > i915_gem_gtt_unbind_object(obj);
> > if (obj->has_aliasing_ppgtt_mapping) {
> > - i915_ppgtt_unbind_object(dev_priv->mm.aliasing_ppgtt, obj);
> > + i915_ppgtt_unbind_object(dev_priv->gtt.aliasing_ppgtt, obj);
> > obj->has_aliasing_ppgtt_mapping = 0;
> > }
> > i915_gem_gtt_finish_object(obj);
> > @@ -3359,7 +3359,7 @@ int i915_gem_object_set_cache_level(struct drm_i915_gem_object *obj,
> > if (obj->has_global_gtt_mapping)
> > i915_gem_gtt_bind_object(obj, cache_level);
> > if (obj->has_aliasing_ppgtt_mapping)
> > - i915_ppgtt_bind_object(dev_priv->mm.aliasing_ppgtt,
> > + i915_ppgtt_bind_object(dev_priv->gtt.aliasing_ppgtt,
> > obj, cache_level);
> >
> > obj->gtt_space->color = cache_level;
> > @@ -3668,7 +3668,7 @@ i915_gem_object_pin(struct drm_i915_gem_object *obj,
> > if (ret)
> > return ret;
> >
> > - if (!dev_priv->mm.aliasing_ppgtt)
> > + if (!dev_priv->gtt.aliasing_ppgtt)
> > i915_gem_gtt_bind_object(obj, obj->cache_level);
> > }
> >
> > @@ -4191,10 +4191,10 @@ i915_gem_init_hw(struct drm_device *dev)
> > * the do_switch), but before enabling PPGTT. So don't move this.
> > */
> > ret = i915_gem_context_enable(dev_priv);
> > - if (ret || !dev_priv->mm.aliasing_ppgtt)
> > + if (ret || !dev_priv->gtt.aliasing_ppgtt)
> > goto disable_ctx_out;
> >
> > - ret = dev_priv->mm.aliasing_ppgtt->enable(dev);
> > + ret = dev_priv->gtt.aliasing_ppgtt->enable(dev);
> > if (ret)
> > goto disable_ctx_out;
> >
> > @@ -4236,7 +4236,7 @@ int i915_gem_init(struct drm_device *dev)
> > dev_priv->hw_contexts_disabled = true;
> >
> > ggtt_only:
> > - if (!dev_priv->mm.aliasing_ppgtt) {
> > + if (!dev_priv->gtt.aliasing_ppgtt) {
> > if (HAS_HW_CONTEXTS(dev))
> > DRM_DEBUG_DRIVER("Context setup failed %d\n", ret);
> > i915_gem_setup_global_gtt(dev, 0, dev_priv->gtt.mappable_end,
> > diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> > index d92f121..aa4fc4a 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_context.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> > @@ -226,7 +226,7 @@ static int create_default_context(struct drm_i915_private *dev_priv)
> > }
> >
> > dev_priv->ring[RCS].default_context = ctx;
> > - dev_priv->mm.aliasing_ppgtt = &ctx->ppgtt;
> > + dev_priv->gtt.aliasing_ppgtt = &ctx->ppgtt;
> >
> > DRM_DEBUG_DRIVER("Default HW context loaded\n");
> > return 0;
> > @@ -300,7 +300,7 @@ void i915_gem_context_fini(struct drm_device *dev)
> > i915_gem_context_unreference(dctx);
> > dev_priv->ring[RCS].default_context = NULL;
> > dev_priv->ring[RCS].last_context = NULL;
> > - dev_priv->mm.aliasing_ppgtt = NULL;
> > + dev_priv->gtt.aliasing_ppgtt = NULL;
> > }
> >
> > int i915_gem_context_enable(struct drm_i915_private *dev_priv)
> > diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> > index 7fcd6c0..93870bb 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> > @@ -429,8 +429,8 @@ i915_gem_execbuffer_reserve_object(struct drm_i915_gem_object *obj,
> > }
> >
> > /* Ensure ppgtt mapping exists if needed */
> > - if (dev_priv->mm.aliasing_ppgtt && !obj->has_aliasing_ppgtt_mapping) {
> > - i915_ppgtt_bind_object(dev_priv->mm.aliasing_ppgtt,
> > + if (dev_priv->gtt.aliasing_ppgtt && !obj->has_aliasing_ppgtt_mapping) {
> > + i915_ppgtt_bind_object(dev_priv->gtt.aliasing_ppgtt,
> > obj, obj->cache_level);
> >
> > obj->has_aliasing_ppgtt_mapping = 1;
> > diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> > index 6de75c7..18820cb 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> > @@ -127,7 +127,7 @@ static int gen6_ppgtt_enable(struct drm_device *dev)
> > drm_i915_private_t *dev_priv = dev->dev_private;
> > uint32_t pd_offset;
> > struct intel_ring_buffer *ring;
> > - struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
> > + struct i915_hw_ppgtt *ppgtt = dev_priv->gtt.aliasing_ppgtt;
> > int i;
> >
> > BUG_ON(ppgtt->pd_offset & 0x3f);
> > @@ -445,8 +445,8 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev)
> > i915_gtt_vm->start / PAGE_SIZE,
> > i915_gtt_vm->total / PAGE_SIZE);
> >
> > - if (dev_priv->mm.aliasing_ppgtt)
> > - gen6_write_pdes(dev_priv->mm.aliasing_ppgtt);
> > + if (dev_priv->gtt.aliasing_ppgtt)
> > + gen6_write_pdes(dev_priv->gtt.aliasing_ppgtt);
> >
> > list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
> > i915_gem_clflush_object(obj);
> > --
> > 1.8.3.1
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at 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
More information about the Intel-gfx
mailing list