提交 883445d4 编写于 作者: C Chris Wilson

drm/i915: Only switch to default context when evicting from GGTT

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: NChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1466776558-21516-7-git-send-email-chris@chris-wilson.co.uk
上级 6e5a5beb
...@@ -183,9 +183,11 @@ i915_gem_evict_something(struct drm_device *dev, struct i915_address_space *vm, ...@@ -183,9 +183,11 @@ i915_gem_evict_something(struct drm_device *dev, struct i915_address_space *vm,
if (pass++ == 0) { if (pass++ == 0) {
struct drm_i915_private *dev_priv = to_i915(dev); struct drm_i915_private *dev_priv = to_i915(dev);
ret = switch_to_pinned_context(dev_priv); if (i915_is_ggtt(vm)) {
if (ret) ret = switch_to_pinned_context(dev_priv);
return ret; if (ret)
return ret;
}
ret = i915_gem_wait_for_idle(dev_priv); ret = i915_gem_wait_for_idle(dev_priv);
if (ret) if (ret)
...@@ -300,9 +302,11 @@ int i915_gem_evict_vm(struct i915_address_space *vm, bool do_idle) ...@@ -300,9 +302,11 @@ int i915_gem_evict_vm(struct i915_address_space *vm, bool do_idle)
if (do_idle) { if (do_idle) {
struct drm_i915_private *dev_priv = to_i915(vm->dev); struct drm_i915_private *dev_priv = to_i915(vm->dev);
ret = switch_to_pinned_context(dev_priv); if (i915_is_ggtt(vm)) {
if (ret) ret = switch_to_pinned_context(dev_priv);
return ret; if (ret)
return ret;
}
ret = i915_gem_wait_for_idle(dev_priv); ret = i915_gem_wait_for_idle(dev_priv);
if (ret) if (ret)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册