diff mbox

drm/i915: Assert we idle in the kernel context

Message ID 20180531224057.6036-1-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Chris Wilson May 31, 2018, 10:40 p.m. UTC
Now that we always switch to the kernel context upon idling, we can
make that assertion.

References: 4dfacb0bcbee ("drm/i915: Switch to kernel context before idling at runtime")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_gem.c | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

Comments

Mika Kuoppala June 1, 2018, 9:13 a.m. UTC | #1
Chris Wilson <chris@chris-wilson.co.uk> writes:

> Now that we always switch to the kernel context upon idling, we can
> make that assertion.
>
> References: 4dfacb0bcbee ("drm/i915: Switch to kernel context before idling at runtime")
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>

Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>

> ---
>  drivers/gpu/drm/i915/i915_gem.c | 31 ++++++++++++++++++-------------
>  1 file changed, 18 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index f5c4ef052001..66bb81cd43cd 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -3498,6 +3498,22 @@ new_requests_since_last_retire(const struct drm_i915_private *i915)
>  		work_pending(&i915->gt.idle_work.work));
>  }
>  
> +static void assert_kernel_context_is_current(struct drm_i915_private *i915)
> +{
> +	struct intel_engine_cs *engine;
> +	enum intel_engine_id id;
> +
> +	if (i915_terminally_wedged(&i915->gpu_error))
> +		return;
> +
> +	GEM_BUG_ON(i915->gt.active_requests);
> +	for_each_engine(engine, i915, id) {
> +		GEM_BUG_ON(__i915_gem_active_peek(&engine->timeline.last_request));
> +		GEM_BUG_ON(engine->last_retired_context !=
> +			   to_intel_context(i915->kernel_context, engine));
> +	}
> +}
> +
>  static void
>  i915_gem_idle_work_handler(struct work_struct *work)
>  {
> @@ -3558,6 +3574,8 @@ i915_gem_idle_work_handler(struct work_struct *work)
>  	if (new_requests_since_last_retire(dev_priv))
>  		goto out_unlock;
>  
> +	assert_kernel_context_is_current(dev_priv);
> +
>  	epoch = __i915_gem_park(dev_priv);
>  
>  	rearm_hangcheck = false;
> @@ -4944,19 +4962,6 @@ void __i915_gem_object_release_unless_active(struct drm_i915_gem_object *obj)
>  		i915_gem_object_put(obj);
>  }
>  
> -static void assert_kernel_context_is_current(struct drm_i915_private *i915)
> -{
> -	struct i915_gem_context *kctx = i915->kernel_context;
> -	struct intel_engine_cs *engine;
> -	enum intel_engine_id id;
> -
> -	GEM_BUG_ON(i915->gt.active_requests);
> -	for_each_engine(engine, i915, id) {
> -		GEM_BUG_ON(__i915_gem_active_peek(&engine->timeline.last_request));
> -		GEM_BUG_ON(engine->last_retired_context->gem_context != kctx);
> -	}
> -}
> -
>  void i915_gem_sanitize(struct drm_i915_private *i915)
>  {
>  	struct intel_engine_cs *engine;
> -- 
> 2.17.1
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index f5c4ef052001..66bb81cd43cd 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3498,6 +3498,22 @@  new_requests_since_last_retire(const struct drm_i915_private *i915)
 		work_pending(&i915->gt.idle_work.work));
 }
 
+static void assert_kernel_context_is_current(struct drm_i915_private *i915)
+{
+	struct intel_engine_cs *engine;
+	enum intel_engine_id id;
+
+	if (i915_terminally_wedged(&i915->gpu_error))
+		return;
+
+	GEM_BUG_ON(i915->gt.active_requests);
+	for_each_engine(engine, i915, id) {
+		GEM_BUG_ON(__i915_gem_active_peek(&engine->timeline.last_request));
+		GEM_BUG_ON(engine->last_retired_context !=
+			   to_intel_context(i915->kernel_context, engine));
+	}
+}
+
 static void
 i915_gem_idle_work_handler(struct work_struct *work)
 {
@@ -3558,6 +3574,8 @@  i915_gem_idle_work_handler(struct work_struct *work)
 	if (new_requests_since_last_retire(dev_priv))
 		goto out_unlock;
 
+	assert_kernel_context_is_current(dev_priv);
+
 	epoch = __i915_gem_park(dev_priv);
 
 	rearm_hangcheck = false;
@@ -4944,19 +4962,6 @@  void __i915_gem_object_release_unless_active(struct drm_i915_gem_object *obj)
 		i915_gem_object_put(obj);
 }
 
-static void assert_kernel_context_is_current(struct drm_i915_private *i915)
-{
-	struct i915_gem_context *kctx = i915->kernel_context;
-	struct intel_engine_cs *engine;
-	enum intel_engine_id id;
-
-	GEM_BUG_ON(i915->gt.active_requests);
-	for_each_engine(engine, i915, id) {
-		GEM_BUG_ON(__i915_gem_active_peek(&engine->timeline.last_request));
-		GEM_BUG_ON(engine->last_retired_context->gem_context != kctx);
-	}
-}
-
 void i915_gem_sanitize(struct drm_i915_private *i915)
 {
 	struct intel_engine_cs *engine;