summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2016-06-24 14:55:58 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2016-06-24 15:03:32 +0100
commit883445d43e45ddc5ef19274a169a1aa603428ab6 (patch)
tree94004dd820937068e9a7e00eae37df09cd994bfd
parent6e5a5beb8e344b1ab929de0c8446a61a70ed94ba (diff)
downloadop-kernel-dev-883445d43e45ddc5ef19274a169a1aa603428ab6.zip
op-kernel-dev-883445d43e45ddc5ef19274a169a1aa603428ab6.tar.gz
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: 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
-rw-r--r--drivers/gpu/drm/i915/i915_gem_evict.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c
index 5741b58..3c1280e 100644
--- a/drivers/gpu/drm/i915/i915_gem_evict.c
+++ b/drivers/gpu/drm/i915/i915_gem_evict.c
@@ -183,9 +183,11 @@ none:
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)
@@ -300,9 +302,11 @@ int i915_gem_evict_vm(struct i915_address_space *vm, bool do_idle)
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)
OpenPOWER on IntegriCloud