Re: [Intel-gfx] [PATCH 16/46] drm/i915/selftests: Mark up rpm wakerefs
Chris Wilson writes: > Track the temporary wakerefs used within the selftests so that leaks are > clear. > > Signed-off-by: Chris Wilson > Cc: Jani Nikula > --- > drivers/gpu/drm/i915/selftests/huge_pages.c | 5 ++-- > drivers/gpu/drm/i915/selftests/i915_gem.c | 29 --- > .../drm/i915/selftests/i915_gem_coherency.c | 5 ++-- > .../gpu/drm/i915/selftests/i915_gem_context.c | 27 ++--- > .../gpu/drm/i915/selftests/i915_gem_evict.c | 11 --- > drivers/gpu/drm/i915/selftests/i915_gem_gtt.c | 10 --- > .../gpu/drm/i915/selftests/i915_gem_object.c | 18 > drivers/gpu/drm/i915/selftests/i915_request.c | 22 -- > drivers/gpu/drm/i915/selftests/intel_guc.c| 10 --- > .../gpu/drm/i915/selftests/intel_hangcheck.c | 15 ++ > drivers/gpu/drm/i915/selftests/intel_lrc.c| 25 +--- > .../drm/i915/selftests/intel_workarounds.c| 27 ++--- > 12 files changed, 126 insertions(+), 78 deletions(-) > > diff --git a/drivers/gpu/drm/i915/selftests/huge_pages.c > b/drivers/gpu/drm/i915/selftests/huge_pages.c > index 731dfd3d3fc8..c7a4599173bb 100644 > --- a/drivers/gpu/drm/i915/selftests/huge_pages.c > +++ b/drivers/gpu/drm/i915/selftests/huge_pages.c > @@ -1760,6 +1760,7 @@ int i915_gem_huge_page_live_selftests(struct > drm_i915_private *dev_priv) > }; > struct drm_file *file; > struct i915_gem_context *ctx; > + intel_wakeref_t wakeref; > int err; > > if (!HAS_PPGTT(dev_priv)) { > @@ -1775,7 +1776,7 @@ int i915_gem_huge_page_live_selftests(struct > drm_i915_private *dev_priv) > return PTR_ERR(file); > > mutex_lock(&dev_priv->drm.struct_mutex); > - intel_runtime_pm_get(dev_priv); > + wakeref = intel_runtime_pm_get(dev_priv); > > ctx = live_context(dev_priv, file); > if (IS_ERR(ctx)) { > @@ -1789,7 +1790,7 @@ int i915_gem_huge_page_live_selftests(struct > drm_i915_private *dev_priv) > err = i915_subtests(tests, ctx); > > out_unlock: > - intel_runtime_pm_put_unchecked(dev_priv); > + intel_runtime_pm_put(dev_priv, wakeref); > mutex_unlock(&dev_priv->drm.struct_mutex); > > mock_file_free(dev_priv, file); > diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c > b/drivers/gpu/drm/i915/selftests/i915_gem.c > index 762e1a7125f5..01a46c46fe25 100644 > --- a/drivers/gpu/drm/i915/selftests/i915_gem.c > +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c > @@ -16,9 +16,10 @@ static int switch_to_context(struct drm_i915_private *i915, > { > struct intel_engine_cs *engine; > enum intel_engine_id id; > + intel_wakeref_t wakeref; > int err = 0; > > - intel_runtime_pm_get(i915); > + wakeref = intel_runtime_pm_get(i915); > > for_each_engine(engine, i915, id) { > struct i915_request *rq; > @@ -32,7 +33,7 @@ static int switch_to_context(struct drm_i915_private *i915, > i915_request_add(rq); > } > > - intel_runtime_pm_put_unchecked(i915); > + intel_runtime_pm_put(i915, wakeref); > > return err; > } > @@ -65,7 +66,9 @@ static void trash_stolen(struct drm_i915_private *i915) > > static void simulate_hibernate(struct drm_i915_private *i915) > { > - intel_runtime_pm_get(i915); > + intel_wakeref_t wakeref; > + > + wakeref = intel_runtime_pm_get(i915); > > /* >* As a final sting in the tail, invalidate stolen. Under a real S4, > @@ -76,7 +79,7 @@ static void simulate_hibernate(struct drm_i915_private > *i915) >*/ > trash_stolen(i915); > > - intel_runtime_pm_put_unchecked(i915); > + intel_runtime_pm_put(i915, wakeref); > } > > static int pm_prepare(struct drm_i915_private *i915) > @@ -93,39 +96,45 @@ static int pm_prepare(struct drm_i915_private *i915) > > static void pm_suspend(struct drm_i915_private *i915) > { > - intel_runtime_pm_get(i915); > + intel_wakeref_t wakeref; > + > + wakeref = intel_runtime_pm_get(i915); > > i915_gem_suspend_gtt_mappings(i915); > i915_gem_suspend_late(i915); > > - intel_runtime_pm_put_unchecked(i915); > + intel_runtime_pm_put(i915, wakeref); > } > > static void pm_hibernate(struct drm_i915_private *i915) > { > - intel_runtime_pm_get(i915); > + intel_wakeref_t wakeref; > + > + wakeref = intel_runtime_pm_get(i915); > > i915_gem_suspend_gtt_mappings(i915); > > i915_gem_freeze(i915); > i915_gem_freeze_late(i915); > > - intel_runtime_pm_put_unchecked(i915); > + intel_runtime_pm_put(i915, wakeref); > } > > static void pm_resume(struct drm_i915_private *i915) > { > + intel_wakeref_t wakeref; > + > /* >* Both suspend and hibernate follow the same wakeup path and assume >* that runtime-pm just works. >*/ > - intel_runtime_pm_get(i915); > + wakeref = intel_runtime_pm_get(i915); > > intel_engines_sanitize(i915,
[Intel-gfx] [PATCH 16/46] drm/i915/selftests: Mark up rpm wakerefs
Track the temporary wakerefs used within the selftests so that leaks are clear. Signed-off-by: Chris Wilson Cc: Jani Nikula --- drivers/gpu/drm/i915/selftests/huge_pages.c | 5 ++-- drivers/gpu/drm/i915/selftests/i915_gem.c | 29 --- .../drm/i915/selftests/i915_gem_coherency.c | 5 ++-- .../gpu/drm/i915/selftests/i915_gem_context.c | 27 ++--- .../gpu/drm/i915/selftests/i915_gem_evict.c | 11 --- drivers/gpu/drm/i915/selftests/i915_gem_gtt.c | 10 --- .../gpu/drm/i915/selftests/i915_gem_object.c | 18 drivers/gpu/drm/i915/selftests/i915_request.c | 22 -- drivers/gpu/drm/i915/selftests/intel_guc.c| 10 --- .../gpu/drm/i915/selftests/intel_hangcheck.c | 15 ++ drivers/gpu/drm/i915/selftests/intel_lrc.c| 25 +--- .../drm/i915/selftests/intel_workarounds.c| 27 ++--- 12 files changed, 126 insertions(+), 78 deletions(-) diff --git a/drivers/gpu/drm/i915/selftests/huge_pages.c b/drivers/gpu/drm/i915/selftests/huge_pages.c index 731dfd3d3fc8..c7a4599173bb 100644 --- a/drivers/gpu/drm/i915/selftests/huge_pages.c +++ b/drivers/gpu/drm/i915/selftests/huge_pages.c @@ -1760,6 +1760,7 @@ int i915_gem_huge_page_live_selftests(struct drm_i915_private *dev_priv) }; struct drm_file *file; struct i915_gem_context *ctx; + intel_wakeref_t wakeref; int err; if (!HAS_PPGTT(dev_priv)) { @@ -1775,7 +1776,7 @@ int i915_gem_huge_page_live_selftests(struct drm_i915_private *dev_priv) return PTR_ERR(file); mutex_lock(&dev_priv->drm.struct_mutex); - intel_runtime_pm_get(dev_priv); + wakeref = intel_runtime_pm_get(dev_priv); ctx = live_context(dev_priv, file); if (IS_ERR(ctx)) { @@ -1789,7 +1790,7 @@ int i915_gem_huge_page_live_selftests(struct drm_i915_private *dev_priv) err = i915_subtests(tests, ctx); out_unlock: - intel_runtime_pm_put_unchecked(dev_priv); + intel_runtime_pm_put(dev_priv, wakeref); mutex_unlock(&dev_priv->drm.struct_mutex); mock_file_free(dev_priv, file); diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c b/drivers/gpu/drm/i915/selftests/i915_gem.c index 762e1a7125f5..01a46c46fe25 100644 --- a/drivers/gpu/drm/i915/selftests/i915_gem.c +++ b/drivers/gpu/drm/i915/selftests/i915_gem.c @@ -16,9 +16,10 @@ static int switch_to_context(struct drm_i915_private *i915, { struct intel_engine_cs *engine; enum intel_engine_id id; + intel_wakeref_t wakeref; int err = 0; - intel_runtime_pm_get(i915); + wakeref = intel_runtime_pm_get(i915); for_each_engine(engine, i915, id) { struct i915_request *rq; @@ -32,7 +33,7 @@ static int switch_to_context(struct drm_i915_private *i915, i915_request_add(rq); } - intel_runtime_pm_put_unchecked(i915); + intel_runtime_pm_put(i915, wakeref); return err; } @@ -65,7 +66,9 @@ static void trash_stolen(struct drm_i915_private *i915) static void simulate_hibernate(struct drm_i915_private *i915) { - intel_runtime_pm_get(i915); + intel_wakeref_t wakeref; + + wakeref = intel_runtime_pm_get(i915); /* * As a final sting in the tail, invalidate stolen. Under a real S4, @@ -76,7 +79,7 @@ static void simulate_hibernate(struct drm_i915_private *i915) */ trash_stolen(i915); - intel_runtime_pm_put_unchecked(i915); + intel_runtime_pm_put(i915, wakeref); } static int pm_prepare(struct drm_i915_private *i915) @@ -93,39 +96,45 @@ static int pm_prepare(struct drm_i915_private *i915) static void pm_suspend(struct drm_i915_private *i915) { - intel_runtime_pm_get(i915); + intel_wakeref_t wakeref; + + wakeref = intel_runtime_pm_get(i915); i915_gem_suspend_gtt_mappings(i915); i915_gem_suspend_late(i915); - intel_runtime_pm_put_unchecked(i915); + intel_runtime_pm_put(i915, wakeref); } static void pm_hibernate(struct drm_i915_private *i915) { - intel_runtime_pm_get(i915); + intel_wakeref_t wakeref; + + wakeref = intel_runtime_pm_get(i915); i915_gem_suspend_gtt_mappings(i915); i915_gem_freeze(i915); i915_gem_freeze_late(i915); - intel_runtime_pm_put_unchecked(i915); + intel_runtime_pm_put(i915, wakeref); } static void pm_resume(struct drm_i915_private *i915) { + intel_wakeref_t wakeref; + /* * Both suspend and hibernate follow the same wakeup path and assume * that runtime-pm just works. */ - intel_runtime_pm_get(i915); + wakeref = intel_runtime_pm_get(i915); intel_engines_sanitize(i915, false); i915_gem_sanitize(i915); i915_gem_resume(i915); - intel_runtime_pm_put_unchecked(i915); + intel_runtime_pm_put(i915, wakeref); } static int igt_g