Message ID | 1424366285-29232-17-git-send-email-John.C.Harrison@Intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 19/02/2015 17:17, John.C.Harrison@Intel.com wrote: > From: John Harrison <John.C.Harrison@Intel.com> > > Added explicit request creation and submission to the GPU idle code path. > > For: VIZ-5115 > Signed-off-by: John Harrison <John.C.Harrison@Intel.com> > --- > drivers/gpu/drm/i915/i915_gem.c | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index c5b9bc7..51f719c 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -3114,11 +3114,27 @@ int i915_gpu_idle(struct drm_device *dev) > /* Flush everything onto the inactive list. */ > for_each_ring(ring, dev_priv, i) { > if (!i915.enable_execlists) { > - ret = i915_switch_context(ring, ring->default_context); > + struct drm_i915_gem_request *req; > + > + ret = dev_priv->gt.alloc_request(ring, ring->default_context, &req); > if (ret) > return ret; > + > + ret = i915_switch_context(req->ring, ring->default_context); > + if (ret) { > + i915_gem_request_unreference(req); > + return ret; > + } > + > + ret = i915_add_request_no_flush(req->ring); > + if (ret) { > + i915_gem_request_unreference(req); > + return ret; > + } > } > > + WARN_ON(ring->outstanding_lazy_request); > + > ret = intel_ring_idle(ring); > if (ret) > return ret; > Reviewed-by: Tomas Elf <tomas.elf@intel.com> Thanks, Tomas
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index c5b9bc7..51f719c 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -3114,11 +3114,27 @@ int i915_gpu_idle(struct drm_device *dev) /* Flush everything onto the inactive list. */ for_each_ring(ring, dev_priv, i) { if (!i915.enable_execlists) { - ret = i915_switch_context(ring, ring->default_context); + struct drm_i915_gem_request *req; + + ret = dev_priv->gt.alloc_request(ring, ring->default_context, &req); if (ret) return ret; + + ret = i915_switch_context(req->ring, ring->default_context); + if (ret) { + i915_gem_request_unreference(req); + return ret; + } + + ret = i915_add_request_no_flush(req->ring); + if (ret) { + i915_gem_request_unreference(req); + return ret; + } } + WARN_ON(ring->outstanding_lazy_request); + ret = intel_ring_idle(ring); if (ret) return ret;