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: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20161218153724.8439-4-chris@chris-wilson.co.uk
This commit is contained in:
parent
e8a9c58fcd
commit
69df05e11a
2 changed files with 11 additions and 12 deletions
|
@ -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,
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
|
|
||||||
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 @@ err_open:
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue