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@xxxxxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/i915_drv.h | 7 +++++++ drivers/gpu/drm/i915/i915_perf.c | 16 ++++------------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 7c228622716a..3411e38e32af 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -3320,6 +3320,13 @@ static inline void i915_gem_context_put(struct i915_gem_context *ctx) 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 * i915_gem_context_lookup_timeline(struct i915_gem_context *ctx, struct intel_engine_cs *engine) diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c index cfe4152212b9..ee6271fe96de 100644 --- a/drivers/gpu/drm/i915/i915_perf.c +++ b/drivers/gpu/drm/i915/i915_perf.c @@ -1298,8 +1298,6 @@ static long i915_perf_ioctl(struct file *file, static void i915_perf_destroy_locked(struct i915_perf_stream *stream) { - struct drm_i915_private *dev_priv = stream->dev_priv; - if (stream->enabled) i915_perf_disable_locked(stream); @@ -1308,11 +1306,8 @@ static void i915_perf_destroy_locked(struct i915_perf_stream *stream) list_del(&stream->link); - if (stream->ctx) { - mutex_lock(&dev_priv->drm.struct_mutex); - i915_gem_context_put(stream->ctx); - mutex_unlock(&dev_priv->drm.struct_mutex); - } + if (stream->ctx) + i915_gem_context_put_unlocked(stream->ctx); kfree(stream); } @@ -1446,11 +1441,8 @@ i915_perf_open_ioctl_locked(struct drm_i915_private *dev_priv, err_alloc: kfree(stream); err_ctx: - if (specific_ctx) { - mutex_lock(&dev_priv->drm.struct_mutex); - i915_gem_context_put(specific_ctx); - mutex_unlock(&dev_priv->drm.struct_mutex); - } + if (specific_ctx) + i915_gem_context_put_unlocked(specific_ctx); err: return ret; } -- 2.11.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx