summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorImre Deak <imre.deak@intel.com>2016-11-07 11:20:03 +0200
committerImre Deak <imre.deak@intel.com>2016-11-07 14:48:04 +0200
commit93c97dc17ffc4a0651b5a939d1ef34897513b252 (patch)
tree03bf809e3a80fd4091f69c837eb4928127345d2c
parent5bd11a34e46afa1048bd5330673fb1508183f6a5 (diff)
drm/i915: Avoid early GPU idling due to race with new request
There is a small race where a new request can be submitted and retired after the idle worker started to run which leads to idling the GPU too early. Fix this by deferring the idling to the pending instance of the worker. This scenario was pointed out by Chris. Cc: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Link: http://patchwork.freedesktop.org/patch/msgid/1478510405-11799-2-git-send-email-imre.deak@intel.com
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 490fd302bd1a..82170bcb3bf3 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2766,6 +2766,13 @@ i915_gem_idle_work_handler(struct work_struct *work)
goto out_rearm;
}
+ /*
+ * New request retired after this work handler started, extend active
+ * period until next instance of the work.
+ */
+ if (work_pending(work))
+ goto out_unlock;
+
if (dev_priv->gt.active_requests)
goto out_unlock;