To keep things as sane as possible, switch to the default context before idling. This should help free context objects, as well as put things in a more well defined state before suspending. Signed-off-by: Ben Widawsky <ben at bwidawsk.net> --- drivers/gpu/drm/i915/i915_gem.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 0985aa5..c1aab45 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -3685,6 +3685,8 @@ int i915_gem_idle(struct drm_device *dev) { drm_i915_private_t *dev_priv = dev->dev_private; + struct intel_ring_buffer *ring = &dev_priv->ring[RCS]; + u32 seqno; int ret; mutex_lock(&dev->struct_mutex); @@ -3694,6 +3696,10 @@ i915_gem_idle(struct drm_device *dev) return 0; } + seqno = i915_gem_next_request_seqno(ring); + i915_switch_context(ring, NULL, DEFAULT_CONTEXT_ID, seqno, 0); + WARN_ON(i915_wait_request(ring, seqno, false)); + ret = i915_gpu_idle(dev, true); if (ret) { mutex_unlock(&dev->struct_mutex); -- 1.7.9.4