Re: [Intel-gfx] [PATCH 16/46] drm/i915/selftests: Mark up rpm wakerefs

2019-01-09 Thread Mika Kuoppala
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(_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(_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

2019-01-07 Thread Chris Wilson
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(_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(_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