[Intel-gfx] [PATCH 1/2] drm/i915: Some cleanups for the ppgtt lifetime handling

Chris Wilson chris at chris-wilson.co.uk
Wed Jul 30 12:54:21 CEST 2014


On Wed, Jul 30, 2014 at 12:44:05PM +0200, Daniel Vetter wrote:
> So when reviewing Michel's patch I've noticed a few things and cleaned
> them up:
> - The early checks in ppgtt_release are now redundant: The inactive
>   list should always be empty now, so we can ditch these checks. Even
>   for the aliasing ppgtt (though that's a different confusion) since
>   we tear that down after all the objects are gone.
> - The ppgtt handling functions are splattered all over. Consolidate
>   them in i915_gem_gtt.c, give them OCD prefixes and add wrappers for
>   get/put.
> - There was a bit a confusion in ppgtt_release about whether it cares
>   about the active or inactive list. It should care about them both,
>   so augment the WARNINGs to check for both.
> 
> There's still create_vm_for_ctx left to do, put that is blocked on the
> removal of ppgtt->ctx. Once that's done we can rename it to
> i915_ppgtt_create and move it to its siblings for handling ppgtts.
> 
> Cc: Michel Thierry <michel.thierry at intel.com>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
>  drivers/gpu/drm/i915/i915_drv.h         |  1 -
>  drivers/gpu/drm/i915/i915_gem.c         |  2 +-
>  drivers/gpu/drm/i915/i915_gem_context.c | 35 ++++-----------------------------
>  drivers/gpu/drm/i915/i915_gem_gtt.c     | 17 ++++++++++++++--
>  drivers/gpu/drm/i915/i915_gem_gtt.h     | 12 ++++++++++-
>  5 files changed, 31 insertions(+), 36 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 5fe3b1dfc34c..a89eb87e4af6 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2497,7 +2497,6 @@ void i915_gem_object_ggtt_unpin(struct drm_i915_gem_object *obj);
>  #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 ppgtt_release(struct kref *kref);
>  void i915_gem_context_fini(struct drm_device *dev);
>  void i915_gem_context_reset(struct drm_device *dev);
>  int i915_gem_context_open(struct drm_device *dev, struct drm_file *file);
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 25a32b9c9b4b..1a46be5d2979 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -4511,7 +4511,7 @@ void i915_gem_vma_destroy(struct i915_vma *vma)
>  	ppgtt = vm_to_ppgtt(vm);
>  
>  	if (ppgtt)
> -		kref_put(&ppgtt->ref, ppgtt_release);
> +		i915_ppgtt_put(ppgtt);

Move the if(ppgtt) into i915_ppgtt_put(). And trust in the gcc DCE.
For get, do if (ppgtt)...; return ppgtt. And trust gcc.

Doing that can make callers much neater.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre



More information about the Intel-gfx mailing list