The contexts only pin space within the global GTT. Therefore forcing the
switch to the perma-pinned kernel context only has an effect when trying
to evict from and find room within the global GTT. We can then restrict
the switch to only when operating on the default context. This is mostly
a no-op as full-ppgtt only exists with execlists at present which skips
the context switch anyway.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1466776558-21516-7-git-send-email-chris@chris-wilson.co.uk
if (pass++ == 0) {
struct drm_i915_private *dev_priv = to_i915(dev);
- ret = switch_to_pinned_context(dev_priv);
- if (ret)
- return ret;
+ if (i915_is_ggtt(vm)) {
+ ret = switch_to_pinned_context(dev_priv);
+ if (ret)
+ return ret;
+ }
ret = i915_gem_wait_for_idle(dev_priv);
if (ret)
if (do_idle) {
struct drm_i915_private *dev_priv = to_i915(vm->dev);
- ret = switch_to_pinned_context(dev_priv);
- if (ret)
- return ret;
+ if (i915_is_ggtt(vm)) {
+ ret = switch_to_pinned_context(dev_priv);
+ if (ret)
+ return ret;
+ }
ret = i915_gem_wait_for_idle(dev_priv);
if (ret)