提交 2947e408 编写于 作者: C Chris Wilson

drm/i915/execlists: Request the kernel context be pinned high

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: NChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161218153724.8439-6-chris@chris-wilson.co.uk
上级 70ffe995
...@@ -767,6 +767,7 @@ static int execlists_context_pin(struct intel_engine_cs *engine, ...@@ -767,6 +767,7 @@ static int execlists_context_pin(struct intel_engine_cs *engine,
struct i915_gem_context *ctx) struct i915_gem_context *ctx)
{ {
struct intel_context *ce = &ctx->engine[engine->id]; struct intel_context *ce = &ctx->engine[engine->id];
unsigned int flags;
void *vaddr; void *vaddr;
int ret; int ret;
...@@ -781,8 +782,11 @@ static int execlists_context_pin(struct intel_engine_cs *engine, ...@@ -781,8 +782,11 @@ static int execlists_context_pin(struct intel_engine_cs *engine,
goto err; goto err;
} }
ret = i915_vma_pin(ce->state, 0, GEN8_LR_CONTEXT_ALIGN, flags = PIN_OFFSET_BIAS | GUC_WOPCM_TOP | PIN_GLOBAL;
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) if (ret)
goto err; goto err;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册