[Intel-gfx] [PATCH] drm/i915/userptr: Keep spin_lock/unlock in the same block

Daniel Vetter daniel at ffwll.ch
Fri Jul 25 09:39:19 CEST 2014


On Thu, Jul 24, 2014 at 01:28:44PM +0100, Chris Wilson wrote:
> Move the code around in order to acquire and release the spinlock in the
> same function and in the same block. This keeps static analysers happy
> and the reader sane.
> 
> Suggested-by: Julia Lawall <julia.lawall at lip6.fr>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Julia Lawall <julia.lawall at lip6.fr>

Queued for -next, thanks for the patch.
-Daniel

> ---
>  drivers/gpu/drm/i915/i915_gem_userptr.c | 17 ++++++++---------
>  1 file changed, 8 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c
> index 12358fd..4ef5a92 100644
> --- a/drivers/gpu/drm/i915/i915_gem_userptr.c
> +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
> @@ -96,10 +96,10 @@ static unsigned long cancel_userptr(struct drm_i915_gem_object *obj)
>  	return end;
>  }
>  
> -static void invalidate_range__linear(struct i915_mmu_notifier *mn,
> -				     struct mm_struct *mm,
> -				     unsigned long start,
> -				     unsigned long end)
> +static void *invalidate_range__linear(struct i915_mmu_notifier *mn,
> +				      struct mm_struct *mm,
> +				      unsigned long start,
> +				      unsigned long end)
>  {
>  	struct i915_mmu_object *mo;
>  	unsigned long serial;
> @@ -123,7 +123,7 @@ restart:
>  			goto restart;
>  	}
>  
> -	spin_unlock(&mn->lock);
> +	return NULL;
>  }
>  
>  static void i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
> @@ -138,13 +138,12 @@ static void i915_gem_userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
>  
>  	end--; /* interval ranges are inclusive, but invalidate range is exclusive */
>  	while (next < end) {
> -		struct drm_i915_gem_object *obj;
> +		struct drm_i915_gem_object *obj = NULL;
>  
> -		obj = NULL;
>  		spin_lock(&mn->lock);
>  		if (mn->has_linear)
> -			return invalidate_range__linear(mn, mm, start, end);
> -		if (serial == mn->serial)
> +			it = invalidate_range__linear(mn, mm, start, end);
> +		else if (serial == mn->serial)
>  			it = interval_tree_iter_next(it, next, end);
>  		else
>  			it = interval_tree_iter_first(&mn->objects, start, end);
> -- 
> 1.9.1
> 
> _______________________________________________
> 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