[Intel-gfx] [PATCH 04/49] drm/i915: Add i915_gem_request_unreference__unlocked

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Fri Mar 27 09:42:27 PDT 2015


Hi,

I've noticed this one is a pre-requisite for read-read optimisation...

On 03/27/2015 11:01 AM, Chris Wilson wrote:
> We were missing a convenience stub to aquire the right mutex whilst
> dropping the request, so add it.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>   drivers/gpu/drm/i915/i915_drv.h | 13 +++++++++++++
>   drivers/gpu/drm/i915/i915_gem.c |  8 ++------
>   2 files changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index c80e2e5e591a..fa91ca33d07c 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2149,6 +2149,19 @@ i915_gem_request_unreference(struct drm_i915_gem_request *req)
>   	kref_put(&req->ref, i915_gem_request_free);
>   }
>
> +static inline void
> +i915_gem_request_unreference__unlocked(struct drm_i915_gem_request *req)
> +{
> +	if (req && !atomic_add_unless(&req->ref.refcount, -1, 1)) {
> +		struct drm_device *dev = req->ring->dev;
> +
> +		mutex_lock(&dev->struct_mutex);
> +		if (likely(atomic_dec_and_test(&req->ref.refcount)))
> +			i915_gem_request_free(&req->ref);
> +		mutex_unlock(&dev->struct_mutex);
> +	}
> +}
> +
>   static inline void i915_gem_request_assign(struct drm_i915_gem_request **pdst,
>   					   struct drm_i915_gem_request *src)
>   {
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 476687a9d067..a46372ebb3bc 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -2870,9 +2870,7 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
>   	ret = __i915_wait_request(req, reset_counter, true,
>   				  args->timeout_ns > 0 ? &args->timeout_ns : NULL,
>   				  file->driver_priv);
> -	mutex_lock(&dev->struct_mutex);
> -	i915_gem_request_unreference(req);
> -	mutex_unlock(&dev->struct_mutex);
> +	i915_gem_request_unreference__unlocked(req);
>   	return ret;
>
>   out:
> @@ -4104,9 +4102,7 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
>   	if (ret == 0)
>   		queue_delayed_work(dev_priv->wq, &dev_priv->mm.retire_work, 0);
>
> -	mutex_lock(&dev->struct_mutex);
> -	i915_gem_request_unreference(target);
> -	mutex_unlock(&dev->struct_mutex);
> +	i915_gem_request_unreference__unlocked(target);
>
>   	return ret;
>   }
>

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko


More information about the Intel-gfx mailing list