[Intel-gfx] [PATCH 08/15] drm/i915: Fix up checks for aliasing ppgtt

Thierry, Michel michel.thierry at intel.com
Fri Aug 8 15:03:53 CEST 2014


> -----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>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 6656 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20140808/f0df5164/attachment.bin>


More information about the Intel-gfx mailing list