[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