Re: [PATCH 05/15] drm/i915: Only refcount ppgtt if it actually is one

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Intel-gfx [mailto:intel-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx] On Behalf
> Of Daniel Vetter
> Sent: Wednesday, August 06, 2014 2:05 PM
> To: Intel Graphics Development
> Cc: Daniel Vetter
> Subject:  [PATCH 05/15] drm/i915: Only refcount ppgtt if it
actually
> is one
> 
> This essentially unbreaks non-ppgtt operation where we'd scribble over
> random memory.
> 
> While at it give the vm_to_ppgtt function a proper prefix and make it
> a bit more paranoid.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxx>
> ---
>  drivers/gpu/drm/i915/i915_drv.h     | 10 +++++++++-
>  drivers/gpu/drm/i915/i915_gem.c     |  3 ++-
>  drivers/gpu/drm/i915/i915_gem_gtt.c |  3 ++-
>  3 files changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h
> b/drivers/gpu/drm/i915/i915_drv.h
> index 194367f0ba1a..31422bc07445 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2475,6 +2475,15 @@ static inline bool i915_is_ggtt(struct
> i915_address_space *vm)
>  	return vm == ggtt;
>  }
> 
> +static inline struct i915_hw_ppgtt *
> +i915_vm_to_ppgtt(struct i915_address_space *vm)
> +{
> +	WARN_ON(i915_is_ggtt(vm));
> +
> +	return container_of(vm, struct i915_hw_ppgtt, base);
> +}
> +
> +
>  static inline bool i915_gem_obj_ggtt_bound(struct drm_i915_gem_object
> *obj)
>  {
>  	return i915_gem_obj_bound(obj, obj_to_ggtt(obj));
> @@ -2510,7 +2519,6 @@ void i915_gem_object_ggtt_unpin(struct
> drm_i915_gem_object *obj);
> 
>  /* i915_gem_context.c */
>  #define ctx_to_ppgtt(ctx) container_of((ctx)->vm, struct i915_hw_ppgtt,
> base)
> -#define vm_to_ppgtt(vm) container_of(vm, struct i915_hw_ppgtt, base)
>  int __must_check i915_gem_context_init(struct drm_device *dev);
>  void i915_gem_context_fini(struct drm_device *dev);
>  void i915_gem_context_reset(struct drm_device *dev);
> diff --git a/drivers/gpu/drm/i915/i915_gem.c
> b/drivers/gpu/drm/i915/i915_gem.c
> index b33a677b4b1e..c43ccfdf45a5 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -4508,7 +4508,8 @@ void i915_gem_vma_destroy(struct i915_vma
> *vma)
> 
>  	vm = vma->vm;
> 
> -	i915_ppgtt_put(vm_to_ppgtt(vm));
> +	if (!i915_is_ggtt(vm))
> +		i915_ppgtt_put(i915_vm_to_ppgtt(vm));
> 
>  	list_del(&vma->vma_link);
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c
> b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 83ee41e5c1c7..3753bf184865 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -2204,7 +2204,8 @@ i915_gem_obj_lookup_or_create_vma(struct
> drm_i915_gem_object *obj,
>  	if (!vma)
>  		vma = __i915_gem_vma_create(obj, vm);
> 
> -	i915_ppgtt_get(vm_to_ppgtt(vm));
> +	if (!i915_is_ggtt(vm))
> +		i915_ppgtt_get(i915_vm_to_ppgtt(vm));
> 
>  	return vma;
>  }
> --
> 1.9.3

Reviewed-by: Michel Thierry <michel.thierry@xxxxxxxxx>
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux