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