aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-02-12 17:20:00 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2017-02-13 11:18:23 +0000
commit1d309634bcf4e3ce1c2b112bb04fcdec82ac70e1 (patch)
tree9a170f7296a65d1809a2f4db145730eb0a647194
parentdrm/i915: Always call i915_gem_reset_finish() following i915_gem_reset_prepare() (diff)
downloadlinux-dev-1d309634bcf4e3ce1c2b112bb04fcdec82ac70e1.tar.xz
linux-dev-1d309634bcf4e3ce1c2b112bb04fcdec82ac70e1.zip
drm/i915: Kill the tasklet then disable
Disabling the tasklet leaves it if scheduled on the ready to run list until it is re-enabled. This will leave the ksoftird thread spinning until satisfied. To prevent this situation on starting the GPU reset, we want to kill the tasklet first and then disable. The same problem will arise when a tasklet is scheduled from another device, so a better solution is required for the general case. Reported-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Fixes: 1f7b847d72c3 ("drm/i915: Disable engine->irq_tasklet around resets") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Mika Kuoppala <mika.kuoppala@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170212172002.23072-3-chris@chris-wilson.co.uk Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 48922ff454e6..3c2c2296c1dc 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2651,8 +2651,8 @@ int i915_gem_reset_prepare(struct drm_i915_private *dev_priv)
* Turning off the engine->irq_tasklet until the reset is over
* prevents the race.
*/
- tasklet_disable(&engine->irq_tasklet);
tasklet_kill(&engine->irq_tasklet);
+ tasklet_disable(&engine->irq_tasklet);
if (engine->irq_seqno_barrier)
engine->irq_seqno_barrier(engine);