From a4c969d107a66369e6b8bf6b2fa28ca01723133b Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Mon, 7 Oct 2019 22:09:42 +0100 Subject: [PATCH] drm/i915/perf: Set the exclusive stream under perf->lock The BKL struct_mutex is no more, the only serialisation we required for setting the exclusive stream is already managed by ce->pin_mutex in gen8_configure_all_contexts(). As such, we can manipulate i915_perf.exclusive_stream underneath our own (already held) perf->lock. Signed-off-by: Chris Wilson Cc: Umesh Nerlige Ramappa Cc: Lionel Landwerlin Reviewed-by: Lionel Landwerlin Link: https://patchwork.freedesktop.org/patch/msgid/20191007140812.10963-2-chris@chris-wilson.co.uk Link: https://patchwork.freedesktop.org/patch/msgid/20191007210942.18145-2-chris@chris-wilson.co.uk --- drivers/gpu/drm/i915/i915_perf.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c index 5a25bbeb6c7a..e5973809b69a 100644 --- a/drivers/gpu/drm/i915/i915_perf.c +++ b/drivers/gpu/drm/i915/i915_perf.c @@ -1343,10 +1343,8 @@ static void i915_oa_stream_destroy(struct i915_perf_stream *stream) * Unset exclusive_stream first, it will be checked while disabling * the metric set on gen8+. */ - mutex_lock(&perf->i915->drm.struct_mutex); perf->exclusive_stream = NULL; perf->ops.disable_metric_set(stream); - mutex_unlock(&perf->i915->drm.struct_mutex); free_oa_buffer(stream); @@ -1853,7 +1851,7 @@ static int gen8_configure_all_contexts(struct i915_perf_stream *stream, for (i = 2; i < ARRAY_SIZE(regs); i++) regs[i].value = oa_config_flex_reg(oa_config, regs[i].reg); - lockdep_assert_held(&i915->drm.struct_mutex); + lockdep_assert_held(&stream->perf->lock); /* * The OA register config is setup through the context image. This image @@ -2220,10 +2218,6 @@ static int i915_oa_stream_init(struct i915_perf_stream *stream, if (ret) goto err_oa_buf_alloc; - ret = i915_mutex_lock_interruptible(&stream->perf->i915->drm); - if (ret) - goto err_lock; - stream->ops = &i915_oa_stream_ops; perf->exclusive_stream = stream; @@ -2233,8 +2227,6 @@ static int i915_oa_stream_init(struct i915_perf_stream *stream, goto err_enable; } - mutex_unlock(&stream->perf->i915->drm.struct_mutex); - hrtimer_init(&stream->poll_check_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); stream->poll_check_timer.function = oa_poll_check_timer_cb; @@ -2246,9 +2238,7 @@ static int i915_oa_stream_init(struct i915_perf_stream *stream, err_enable: perf->exclusive_stream = NULL; perf->ops.disable_metric_set(stream); - mutex_unlock(&stream->perf->i915->drm.struct_mutex); -err_lock: free_oa_buffer(stream); err_oa_buf_alloc: -- 2.39.5