On Thu, Dec 18, 2014 at 05:10:11PM +0000, Michel Thierry wrote: > From: Ben Widawsky <benjamin.widawsky@xxxxxxxxx> > > This patch continues on the idea from the previous patch. From here on, > in the steady state, PDEs are all pointing to the scratch page table (as > recommended in the spec). When an object is allocated in the VA range, > the code will determine if we need to allocate a page for the page > table. Similarly when the object is destroyed, we will remove, and free > the page table pointing the PDE back to the scratch page. > > Following patches will work to unify the code a bit as we bring in GEN8 > support. GEN6 and GEN8 are different enough that I had a hard time to > get to this point with as much common code as I do. > > The aliasing PPGTT must pre-allocate all of the page tables. There are a > few reasons for this. Two trivial ones: aliasing ppgtt goes through the > ggtt paths, so it's hard to maintain, we currently do not restore the > default context (assuming the previous force reload is indeed > necessary). Most importantly though, the only way (it seems from > empirical evidence) to invalidate the CS TLBs on non-render ring is to > either use ring sync (which requires actually stopping the rings in > order to synchronize when the sync completes vs. where you are in > execution), or to reload DCLV. Since without full PPGTT we do not ever > reload the DCLV register, there is no good way to achieve this. The > simplest solution is just to not support dynamic page table > creation/destruction in the aliasing PPGTT. > > We could always reload DCLV, but this seems like quite a bit of excess > overhead only to save at most 2MB-4k of memory for the aliasing PPGTT > page tables. > > v2: Make the page table bitmap declared inside the function (Chris) > Simplify the way scratching address space works. > Move the alloc/teardown tracepoints up a level in the call stack so that > both all implementations get the trace. > > v3: Updated trace event to spit out a name > > v4: Aliasing ppgtt is now initialized differently (in setup global gtt) > > Signed-off-by: Ben Widawsky <ben@xxxxxxxxxxxx> > Signed-off-by: Michel Thierry <michel.thierry@xxxxxxxxx> (v4) > --- > drivers/gpu/drm/i915/i915_debugfs.c | 3 +- > drivers/gpu/drm/i915/i915_drv.h | 7 ++ > drivers/gpu/drm/i915/i915_gem_gtt.c | 125 +++++++++++++++++++++++++++++++++--- > drivers/gpu/drm/i915/i915_trace.h | 116 +++++++++++++++++++++++++++++++++ > 4 files changed, 240 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c > index 60f91bc..0f63076 100644 > --- a/drivers/gpu/drm/i915/i915_debugfs.c > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > @@ -2149,6 +2149,8 @@ static void gen6_ppgtt_info(struct seq_file *m, struct drm_device *dev) > 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))); > } > + seq_printf(m, "ECOCHK: 0x%08x\n\n", I915_READ(GAM_ECOCHK)); > + > if (dev_priv->mm.aliasing_ppgtt) { > struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt; > > @@ -2165,7 +2167,6 @@ static void gen6_ppgtt_info(struct seq_file *m, struct drm_device *dev) > get_pid_task(file->pid, PIDTYPE_PID)->comm); > idr_for_each(&file_priv->context_idr, per_file_ctx, m); > } > - seq_printf(m, "ECOCHK: 0x%08x\n", I915_READ(GAM_ECOCHK)); > } > > static int i915_ppgtt_info(struct seq_file *m, void *data) > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index 3047291f..d74db21 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -2819,6 +2819,13 @@ static inline bool i915_is_ggtt(struct i915_address_space *vm) > return vm == ggtt; > } > > +static inline bool i915_is_aliasing_ppgtt(struct i915_address_space *vm) > +{ > + struct i915_address_space *appgtt = > + &((struct drm_i915_private *)(vm)->dev->dev_private)->mm.aliasing_ppgtt->base; > + return vm == appgtt; > +} We killed the aliasing ppgtt vm, this condition will never be true when you pass any vma->vm pointer to it. -Daniel -- 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