Commit 69df05e1 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Simplify releasing context reference

A few users only take the struct_mutex in order to release a reference
to a context. We can expose a kref_put_mutex() wrapper in order to
simplify these users, and optimise taking of the mutex to the final
unref.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161218153724.8439-4-chris@chris-wilson.co.uk
parent e8a9c58f
...@@ -3518,6 +3518,13 @@ static inline void i915_gem_context_put(struct i915_gem_context *ctx) ...@@ -3518,6 +3518,13 @@ static inline void i915_gem_context_put(struct i915_gem_context *ctx)
kref_put(&ctx->ref, i915_gem_context_free); kref_put(&ctx->ref, i915_gem_context_free);
} }
static inline void i915_gem_context_put_unlocked(struct i915_gem_context *ctx)
{
kref_put_mutex(&ctx->ref,
i915_gem_context_free,
&ctx->i915->drm.struct_mutex);
}
static inline struct intel_timeline * static inline struct intel_timeline *
i915_gem_context_lookup_timeline(struct i915_gem_context *ctx, i915_gem_context_lookup_timeline(struct i915_gem_context *ctx,
struct intel_engine_cs *engine) struct intel_engine_cs *engine)
......
...@@ -1555,8 +1555,6 @@ static long i915_perf_ioctl(struct file *file, ...@@ -1555,8 +1555,6 @@ static long i915_perf_ioctl(struct file *file,
*/ */
static void i915_perf_destroy_locked(struct i915_perf_stream *stream) static void i915_perf_destroy_locked(struct i915_perf_stream *stream)
{ {
struct drm_i915_private *dev_priv = stream->dev_priv;
if (stream->enabled) if (stream->enabled)
i915_perf_disable_locked(stream); i915_perf_disable_locked(stream);
...@@ -1565,11 +1563,8 @@ static void i915_perf_destroy_locked(struct i915_perf_stream *stream) ...@@ -1565,11 +1563,8 @@ static void i915_perf_destroy_locked(struct i915_perf_stream *stream)
list_del(&stream->link); list_del(&stream->link);
if (stream->ctx) { if (stream->ctx)
mutex_lock(&dev_priv->drm.struct_mutex); i915_gem_context_put_unlocked(stream->ctx);
i915_gem_context_put(stream->ctx);
mutex_unlock(&dev_priv->drm.struct_mutex);
}
kfree(stream); kfree(stream);
} }
...@@ -1738,11 +1733,8 @@ i915_perf_open_ioctl_locked(struct drm_i915_private *dev_priv, ...@@ -1738,11 +1733,8 @@ i915_perf_open_ioctl_locked(struct drm_i915_private *dev_priv,
err_alloc: err_alloc:
kfree(stream); kfree(stream);
err_ctx: err_ctx:
if (specific_ctx) { if (specific_ctx)
mutex_lock(&dev_priv->drm.struct_mutex); i915_gem_context_put_unlocked(specific_ctx);
i915_gem_context_put(specific_ctx);
mutex_unlock(&dev_priv->drm.struct_mutex);
}
err: err:
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment