[Intel-gfx] [PATCH 1/2] drm/i915: Fix error checking/locking in perf/lookup_context()

Lionel Landwerlin lionel.g.landwerlin at intel.com
Fri Jul 14 15:59:36 UTC 2017


Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

On 14/07/17 16:12, Imre Deak wrote:
> 1acfc104cdf8 missed to convert this one caller to be lockless. The side
> effect of that was that the error check in lookup_context() became
> incorrect. Convert now this caller too.
>
> Fixes: 1acfc104cdf ("drm/i915: Enable rcu-only context lookups")
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> Signed-off-by: Imre Deak <imre.deak at intel.com>
> ---
>   drivers/gpu/drm/i915/i915_perf.c | 32 +++++---------------------------
>   1 file changed, 5 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
> index d9f77a4d85db..96682fd86f82 100644
> --- a/drivers/gpu/drm/i915/i915_perf.c
> +++ b/drivers/gpu/drm/i915/i915_perf.c
> @@ -2483,27 +2483,6 @@ static const struct file_operations fops = {
>   };
>   
>   
> -static struct i915_gem_context *
> -lookup_context(struct drm_i915_private *dev_priv,
> -	       struct drm_i915_file_private *file_priv,
> -	       u32 ctx_user_handle)
> -{
> -	struct i915_gem_context *ctx;
> -	int ret;
> -
> -	ret = i915_mutex_lock_interruptible(&dev_priv->drm);
> -	if (ret)
> -		return ERR_PTR(ret);
> -
> -	ctx = i915_gem_context_lookup(file_priv, ctx_user_handle);
> -	if (!IS_ERR(ctx))
> -		i915_gem_context_get(ctx);
> -
> -	mutex_unlock(&dev_priv->drm.struct_mutex);
> -
> -	return ctx;
> -}
> -
>   /**
>    * i915_perf_open_ioctl_locked - DRM ioctl() for userspace to open a stream FD
>    * @dev_priv: i915 device instance
> @@ -2545,12 +2524,11 @@ i915_perf_open_ioctl_locked(struct drm_i915_private *dev_priv,
>   		u32 ctx_handle = props->ctx_handle;
>   		struct drm_i915_file_private *file_priv = file->driver_priv;
>   
> -		specific_ctx = lookup_context(dev_priv, file_priv, ctx_handle);
> -		if (IS_ERR(specific_ctx)) {
> -			ret = PTR_ERR(specific_ctx);
> -			if (ret != -EINTR)
> -				DRM_DEBUG("Failed to look up context with ID %u for opening perf stream\n",
> -					  ctx_handle);
> +		specific_ctx = i915_gem_context_lookup(file_priv, ctx_handle);
> +		if (!specific_ctx) {
> +			DRM_DEBUG("Failed to look up context with ID %u for opening perf stream\n",
> +				  ctx_handle);
> +			ret = -ENOENT;
>   			goto err;
>   		}
>   	}




More information about the Intel-gfx mailing list