On 2016.12.18 15:37:21 +0000, Chris Wilson wrote: > 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> > Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > --- > 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 dec4ddf132f7..6217f01d3c11 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -3518,6 +3518,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); > +} > + For kref_put_mutex() in final release func should unlock mutex, but I haven't seen i915_gem_context_free() to handle that? gvt context close change in this series breaks VM poweroff when destroy vGPU. > 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 da8537cb8136..a1b7eec58be2 100644 > --- a/drivers/gpu/drm/i915/i915_perf.c > +++ b/drivers/gpu/drm/i915/i915_perf.c > @@ -1555,8 +1555,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); > > @@ -1565,11 +1563,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); > } > @@ -1738,11 +1733,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 -- Open Source Technology Center, Intel ltd. $gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx