Commit 4bfad3dd authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Daniel Vetter

drm/i915: Unpin last_context at reset

We're forgetting to unpin the last_context from the ggtt at GPU reset
time. This leads to the vma pin_count leaking at every reset if the
last context wasn't the ring default context. Further use of the same
context will trigger the pin_count check in i915_gem_object_pin() and
userspace will be faced with EBUSY as a result.

This plaques kms_flip rather badly since it performs lots of resets,
and every fd has its own default context these days.

Fix the problem by properly unpinning the last context at reset.

This regression seems to back to

commit acce9ffa
Author: Ben Widawsky <ben@bwidawsk.net>
Date:   Fri Dec 6 14:11:03 2013 -0800

   drm/i915: Better reset handling for contexts

Testcase: igt/gem_ctx_exec/reset-pin-leak
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 13cf5504
...@@ -382,6 +382,9 @@ void i915_gem_context_reset(struct drm_device *dev) ...@@ -382,6 +382,9 @@ void i915_gem_context_reset(struct drm_device *dev)
dctx->obj->active = 0; dctx->obj->active = 0;
} }
if (ring->last_context->obj && i == RCS)
i915_gem_object_ggtt_unpin(ring->last_context->obj);
i915_gem_context_unreference(ring->last_context); i915_gem_context_unreference(ring->last_context);
i915_gem_context_reference(dctx); i915_gem_context_reference(dctx);
ring->last_context = dctx; ring->last_context = dctx;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment