Message ID | 20170623131907.24236-1-chris@chris-wilson.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 23/06/17 06:19, Chris Wilson wrote: > Smatch spots: > > drivers/gpu/drm/i915/selftests/intel_hangcheck.c:669 igt_render_engine_reset_fallback() error: double unlock 'mutex:&i915->drm.struct_mutex' > > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Michel Thierry <michel.thierry@intel.com> > --- > drivers/gpu/drm/i915/selftests/intel_hangcheck.c | 21 ++++++++++++++------- > 1 file changed, 14 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/i915/selftests/intel_hangcheck.c b/drivers/gpu/drm/i915/selftests/intel_hangcheck.c > index af475189bd52..7096c3911cd3 100644 > --- a/drivers/gpu/drm/i915/selftests/intel_hangcheck.c > +++ b/drivers/gpu/drm/i915/selftests/intel_hangcheck.c > @@ -597,12 +597,12 @@ static int igt_render_engine_reset_fallback(void *arg) > > err = hang_init(&h, i915); > if (err) > - goto unlock; > + goto err_unlock; > > rq = hang_create_request(&h, engine, i915->kernel_context); > if (IS_ERR(rq)) { > err = PTR_ERR(rq); > - goto fini; > + goto err_fini; > } > > i915_gem_request_get(rq); > @@ -614,7 +614,7 @@ static int igt_render_engine_reset_fallback(void *arg) > if (!wait_for_hang(&h, rq)) { > pr_err("Failed to start request %x\n", rq->fence.seqno); > err = -EIO; > - goto out_rq; > + goto err_request; > } > > reset_engine_count = i915_reset_engine_count(&i915->gpu_error, engine); > @@ -646,13 +646,14 @@ static int igt_render_engine_reset_fallback(void *arg) > */ > if (i915_terminally_wedged(&i915->gpu_error)) { > set_bit(I915_RESET_BACKOFF, &i915->gpu_error.flags); > - mutex_lock(&i915->drm.struct_mutex); > rq->fence.error = 0; > > + mutex_lock(&i915->drm.struct_mutex); > set_bit(I915_RESET_HANDOFF, &i915->gpu_error.flags); > i915_reset(i915); > GEM_BUG_ON(test_bit(I915_RESET_HANDOFF, > &i915->gpu_error.flags)); > + mutex_unlock(&i915->drm.struct_mutex); > > if (i915_reset_count(&i915->gpu_error) == reset_count) { > pr_err("No full GPU reset recorded!\n"); > @@ -663,10 +664,8 @@ static int igt_render_engine_reset_fallback(void *arg) > > out_rq: > i915_gem_request_put(rq); > -fini: > hang_fini(&h); > -unlock: > - mutex_unlock(&i915->drm.struct_mutex); > +out_backoff: > clear_bit(I915_RESET_BACKOFF, &i915->gpu_error.flags); > wake_up_all(&i915->gpu_error.reset_queue); > > @@ -674,6 +673,14 @@ static int igt_render_engine_reset_fallback(void *arg) > return -EIO; > > return err; > + > +err_request: > + i915_gem_request_put(rq); > +err_fini: > + hang_fini(&h); > +err_unlock: > + mutex_unlock(&i915->drm.struct_mutex); > + goto out_backoff; > } > > int intel_hangcheck_live_selftests(struct drm_i915_private *i915) > -- > 2.13.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx >
Quoting Patchwork (2017-06-23 14:39:08) > == Series Details == > > Series: drm/i915/selftests: Fix mutex imbalance for igt_render_engine_reset_fallback > URL : https://patchwork.freedesktop.org/series/26288/ > State : success > > == Summary == > > Series 26288v1 drm/i915/selftests: Fix mutex imbalance for igt_render_engine_reset_fallback > https://patchwork.freedesktop.org/api/1.0/series/26288/revisions/1/mbox/ > > Test kms_cursor_legacy: > Subgroup basic-busy-flip-before-cursor-legacy: > fail -> PASS (fi-snb-2600) fdo#100215 > > fdo#100215 https://bugs.freedesktop.org/show_bug.cgi?id=100215 One day, they may be included in BAT! Thanks for the review, sorry for my mess, pushed. -Chris
diff --git a/drivers/gpu/drm/i915/selftests/intel_hangcheck.c b/drivers/gpu/drm/i915/selftests/intel_hangcheck.c index af475189bd52..7096c3911cd3 100644 --- a/drivers/gpu/drm/i915/selftests/intel_hangcheck.c +++ b/drivers/gpu/drm/i915/selftests/intel_hangcheck.c @@ -597,12 +597,12 @@ static int igt_render_engine_reset_fallback(void *arg) err = hang_init(&h, i915); if (err) - goto unlock; + goto err_unlock; rq = hang_create_request(&h, engine, i915->kernel_context); if (IS_ERR(rq)) { err = PTR_ERR(rq); - goto fini; + goto err_fini; } i915_gem_request_get(rq); @@ -614,7 +614,7 @@ static int igt_render_engine_reset_fallback(void *arg) if (!wait_for_hang(&h, rq)) { pr_err("Failed to start request %x\n", rq->fence.seqno); err = -EIO; - goto out_rq; + goto err_request; } reset_engine_count = i915_reset_engine_count(&i915->gpu_error, engine); @@ -646,13 +646,14 @@ static int igt_render_engine_reset_fallback(void *arg) */ if (i915_terminally_wedged(&i915->gpu_error)) { set_bit(I915_RESET_BACKOFF, &i915->gpu_error.flags); - mutex_lock(&i915->drm.struct_mutex); rq->fence.error = 0; + mutex_lock(&i915->drm.struct_mutex); set_bit(I915_RESET_HANDOFF, &i915->gpu_error.flags); i915_reset(i915); GEM_BUG_ON(test_bit(I915_RESET_HANDOFF, &i915->gpu_error.flags)); + mutex_unlock(&i915->drm.struct_mutex); if (i915_reset_count(&i915->gpu_error) == reset_count) { pr_err("No full GPU reset recorded!\n"); @@ -663,10 +664,8 @@ static int igt_render_engine_reset_fallback(void *arg) out_rq: i915_gem_request_put(rq); -fini: hang_fini(&h); -unlock: - mutex_unlock(&i915->drm.struct_mutex); +out_backoff: clear_bit(I915_RESET_BACKOFF, &i915->gpu_error.flags); wake_up_all(&i915->gpu_error.reset_queue); @@ -674,6 +673,14 @@ static int igt_render_engine_reset_fallback(void *arg) return -EIO; return err; + +err_request: + i915_gem_request_put(rq); +err_fini: + hang_fini(&h); +err_unlock: + mutex_unlock(&i915->drm.struct_mutex); + goto out_backoff; } int intel_hangcheck_live_selftests(struct drm_i915_private *i915)
Smatch spots: drivers/gpu/drm/i915/selftests/intel_hangcheck.c:669 igt_render_engine_reset_fallback() error: double unlock 'mutex:&i915->drm.struct_mutex' Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/selftests/intel_hangcheck.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-)