[Intel-gfx] [PATCH 08/15] drm/i915: Fix up checks for aliasing ppgtt
Daniel Vetter
daniel at ffwll.ch
Fri Aug 8 15:49:19 CEST 2014
On Fri, Aug 08, 2014 at 01:03:53PM +0000, Thierry, Michel wrote:
>
> > -----Original Message-----
> > From: Intel-gfx [mailto:intel-gfx-bounces at lists.freedesktop.org] On Behalf
> > Of Daniel Vetter
> > Sent: Wednesday, August 06, 2014 2:05 PM
> > To: Intel Graphics Development
> > Cc: Daniel Vetter
> > Subject: [Intel-gfx] [PATCH 08/15] drm/i915: Fix up checks for aliasing
> ppgtt
> >
> > A subsequent patch will no longer initialize the aliasing ppgtt if we
> > have full ppgtt enabled, since we simply don't need that any more.
> >
> > Unfortunately a few places check for the aliasing ppgtt instead of
> > checking for ppgtt in general. Fix them up.
> >
> > One special case are the gtt offset and size macros, which have some
> > code to remap the aliasing ppgtt to the global gtt. The aliasing ppgtt
> > is _not_ a logical address space, so passing that in as the vm is
> > plain and simple a bug. So just WARN about it and carry on - we have a
> > gracefully fall-through anyway if we can't find the vma.
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> > ---
> > drivers/gpu/drm/i915/i915_cmd_parser.c | 4 +---
> > drivers/gpu/drm/i915/i915_dma.c | 2 +-
> > drivers/gpu/drm/i915/i915_gem.c | 8 ++------
> > drivers/gpu/drm/i915/intel_ringbuffer.c | 4 +---
> > 4 files changed, 5 insertions(+), 13 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c
> > b/drivers/gpu/drm/i915/i915_cmd_parser.c
> > index dea99d92fb4a..c45856bcc8b9 100644
> > --- a/drivers/gpu/drm/i915/i915_cmd_parser.c
> > +++ b/drivers/gpu/drm/i915/i915_cmd_parser.c
> > @@ -842,8 +842,6 @@ finish:
> > */
> > bool i915_needs_cmd_parser(struct intel_engine_cs *ring)
> > {
> > - struct drm_i915_private *dev_priv = ring->dev->dev_private;
> > -
> > if (!ring->needs_cmd_parser)
> > return false;
> >
> > @@ -852,7 +850,7 @@ bool i915_needs_cmd_parser(struct intel_engine_cs
> > *ring)
> > * disabled. That will cause all of the parser's PPGTT checks to
> > * fail. For now, disable parsing when PPGTT is off.
> > */
> > - if (!dev_priv->mm.aliasing_ppgtt)
> > + if (USES_PPGTT(ring->dev))
> > return false;
> >
> > return (i915.enable_cmd_parser == 1);
> > diff --git a/drivers/gpu/drm/i915/i915_dma.c
> > b/drivers/gpu/drm/i915/i915_dma.c
> > index 2e7f03ad5ee2..e5ac1a6e9d26 100644
> > --- a/drivers/gpu/drm/i915/i915_dma.c
> > +++ b/drivers/gpu/drm/i915/i915_dma.c
> > @@ -999,7 +999,7 @@ static int i915_getparam(struct drm_device *dev, void
> > *data,
> > value = HAS_WT(dev);
> > break;
> > case I915_PARAM_HAS_ALIASING_PPGTT:
> > - value = dev_priv->mm.aliasing_ppgtt ||
> > USES_FULL_PPGTT(dev);
> > + value = USES_PPGTT(dev);
> > break;
> > case I915_PARAM_HAS_WAIT_TIMEOUT:
> > value = 1;
> > diff --git a/drivers/gpu/drm/i915/i915_gem.c
> > b/drivers/gpu/drm/i915/i915_gem.c
> > index d8399ee622b9..a79deb189146 100644
> > --- a/drivers/gpu/drm/i915/i915_gem.c
> > +++ b/drivers/gpu/drm/i915/i915_gem.c
> > @@ -5114,9 +5114,7 @@ unsigned long i915_gem_obj_offset(struct
> > drm_i915_gem_object *o,
> > struct drm_i915_private *dev_priv = o->base.dev->dev_private;
> > struct i915_vma *vma;
> >
> > - if (!dev_priv->mm.aliasing_ppgtt ||
> > - vm == &dev_priv->mm.aliasing_ppgtt->base)
> > - vm = &dev_priv->gtt.base;
> > + WARN_ON(vm == &dev_priv->mm.aliasing_ppgtt->base);
> >
> > list_for_each_entry(vma, &o->vma_list, vma_link) {
> > if (vma->vm == vm)
> > @@ -5157,9 +5155,7 @@ unsigned long i915_gem_obj_size(struct
> > drm_i915_gem_object *o,
> > struct drm_i915_private *dev_priv = o->base.dev->dev_private;
> > struct i915_vma *vma;
> >
> > - if (!dev_priv->mm.aliasing_ppgtt ||
> > - vm == &dev_priv->mm.aliasing_ppgtt->base)
> > - vm = &dev_priv->gtt.base;
> > + WARN_ON(vm == &dev_priv->mm.aliasing_ppgtt->base);
> >
> > BUG_ON(list_empty(&o->vma_list));
> >
> > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c
> > b/drivers/gpu/drm/i915/intel_ringbuffer.c
> > index 05969f03c0c1..390e38325b37 100644
> > --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> > @@ -1977,9 +1977,7 @@ gen8_ring_dispatch_execbuffer(struct
> > intel_engine_cs *ring,
> > u64 offset, u32 len,
> > unsigned flags)
> > {
> > - struct drm_i915_private *dev_priv = ring->dev->dev_private;
> > - bool ppgtt = dev_priv->mm.aliasing_ppgtt != NULL &&
> > - !(flags & I915_DISPATCH_SECURE);
> > + bool ppgtt = USES_PPGTT(ring->dev) && !(flags &
> > I915_DISPATCH_SECURE);
> > int ret;
> >
> > ret = intel_ring_begin(ring, 4);
> > --
> > 1.9.3
> >
> Sorry, I spotted another instance in gen8_ppgtt_info (debugfs). It is more
> gen8_ppgtt_info's fault, so I'm sending a follow up patch for it.
> Unless you want to combine them...
> Reviewed-by: Michel Thierry <michel.thierry at intel.com>
Actually I spotted that one and decided that I can't break things worse
than it is - the aliasing ppgtt for full ppgtt is completely unused
(except for these checks), so dumping it doesn't add value.
To check: Does your r-b apply here still even without any fixup for gen8
ppgtt_info?
-Daniel
> > _______________________________________________
> > 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
More information about the Intel-gfx
mailing list