提交 820c5bbb 编写于 作者: C Chris Wilson

drm/i915: Flush the irq and tasklets before asserting engine is idle

Before we assert that the engine is idle, make sure we flush any
residual tasklet. After that point, if the engine is not idle, more work
may be queued despite us trying to park the engine and go to sleep.

References: https://bugs.freedesktop.org/show_bug.cgi?id=103479Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171101202149.32493-1-chris@chris-wilson.co.ukReviewed-by: NMika Kuoppala <mika.kuoppala@linux.intel.com>
上级 71306303
......@@ -1614,6 +1614,10 @@ void intel_engines_park(struct drm_i915_private *i915)
enum intel_engine_id id;
for_each_engine(engine, i915, id) {
/* Flush the residual irq tasklets first. */
intel_engine_disarm_breadcrumbs(engine);
tasklet_kill(&engine->execlists.irq_tasklet);
/*
* We are committed now to parking the engines, make sure there
* will be no more interrupts arriving later and the engines
......@@ -1630,9 +1634,6 @@ void intel_engines_park(struct drm_i915_private *i915)
if (engine->park)
engine->park(engine);
intel_engine_disarm_breadcrumbs(engine);
tasklet_kill(&engine->execlists.irq_tasklet);
i915_gem_batch_pool_fini(&engine->batch_pool);
engine->execlists.no_priolist = false;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册