Message ID | 20180531224057.6036-1-chris@chris-wilson.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 --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;
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(-)