Эх сурвалжийг харах

drm/i915: Kick hangcheck from retire worker

Let's ensure that we cannot run indefinitely without the hangcheck
worker being queued. We removed it from being kicked on every request
because we were kicking it a few millions times in every hangcheck
interval and only once is necessary! However, that leaves us with the
issue of what if userspace never waits for a request, or runs out of
resources, what if userspace just issues a request then spins on
BUSY_IOCTL?

Testcase: igt/gem_busy
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1468055535-19740-3-git-send-email-chris@chris-wilson.co.uk
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
Chris Wilson 9 жил өмнө
parent
commit
c961561382

+ 3 - 1
drivers/gpu/drm/i915/i915_gem.c

@@ -3281,10 +3281,12 @@ i915_gem_retire_work_handler(struct work_struct *work)
 	 * We do not need to do this test under locking as in the worst-case
 	 * We do not need to do this test under locking as in the worst-case
 	 * we queue the retire worker once too often.
 	 * we queue the retire worker once too often.
 	 */
 	 */
-	if (READ_ONCE(dev_priv->gt.awake))
+	if (READ_ONCE(dev_priv->gt.awake)) {
+		i915_queue_hangcheck(dev_priv);
 		queue_delayed_work(dev_priv->wq,
 		queue_delayed_work(dev_priv->wq,
 				   &dev_priv->gt.retire_work,
 				   &dev_priv->gt.retire_work,
 				   round_jiffies_up_relative(HZ));
 				   round_jiffies_up_relative(HZ));
+	}
 }
 }
 
 
 static void
 static void