]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/i915/execlists: Request the kernel context be pinned high
authorChris Wilson <chris@chris-wilson.co.uk>
Sun, 18 Dec 2016 15:37:23 +0000 (15:37 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Sun, 18 Dec 2016 16:18:55 +0000 (16:18 +0000)
PIN_HIGH is an expensive operation (in comparison to allocating from the
hole stack) unsuitable for frequent use (such as switching between
contexts). However, the kernel context should be pinned just once for
the lifetime of the driver, and here it is appropriate to keep it out of
the mappable range (in order to maximise mappable space for users).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161218153724.8439-6-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/intel_lrc.c

index 599afedc449415a410b6c27e2e50b0a38ae0354e..1f8f35a94157e1674595af3a4bb561f67f1d5036 100644 (file)
@@ -767,6 +767,7 @@ static int execlists_context_pin(struct intel_engine_cs *engine,
                                 struct i915_gem_context *ctx)
 {
        struct intel_context *ce = &ctx->engine[engine->id];
+       unsigned int flags;
        void *vaddr;
        int ret;
 
@@ -781,8 +782,11 @@ static int execlists_context_pin(struct intel_engine_cs *engine,
                        goto err;
        }
 
-       ret = i915_vma_pin(ce->state, 0, GEN8_LR_CONTEXT_ALIGN,
-                          PIN_OFFSET_BIAS | GUC_WOPCM_TOP | PIN_GLOBAL);
+       flags = PIN_OFFSET_BIAS | GUC_WOPCM_TOP | PIN_GLOBAL;
+       if (ctx == ctx->i915->kernel_context)
+               flags |= PIN_HIGH;
+
+       ret = i915_vma_pin(ce->state, 0, GEN8_LR_CONTEXT_ALIGN, flags);
        if (ret)
                goto err;