[v5,2/4] drm/i915: Avoid early GPU idling due to race with new request

Submitted by Imre Deak on Nov. 7, 2016, 9:20 a.m.

Details

Message ID 1478510405-11799-2-git-send-email-imre.deak@intel.com
State Accepted
Headers show
Series "Series without cover letter" ( rev: 1 ) in Intel GFX

Not browsing as part of any series.

Commit Message

Imre Deak Nov. 7, 2016, 9:20 a.m.
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>
---
 drivers/gpu/drm/i915/i915_gem.c | 7 +++++++
 1 file changed, 7 insertions(+)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 0dbf38c..36a16df 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;