提交 3dbf26ed 编写于 作者: C Chris Wilson

drm/i915: Don't use GPU relocations prior to cmdparser stalls

If we are using the cmdparser, we will have to copy the batch and so
stall for the relocations. Rather than prolong that stall by adding more
relocation requests, just use CPU relocations and do the stall upfront.
Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20170826135620.25949-1-chris@chris-wilson.co.ukReviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
上级 a575c676
...@@ -268,6 +268,11 @@ static inline u64 gen8_noncanonical_addr(u64 address) ...@@ -268,6 +268,11 @@ static inline u64 gen8_noncanonical_addr(u64 address)
return address & GENMASK_ULL(GEN8_HIGH_ADDRESS_BIT, 0); return address & GENMASK_ULL(GEN8_HIGH_ADDRESS_BIT, 0);
} }
static inline bool eb_use_cmdparser(const struct i915_execbuffer *eb)
{
return eb->engine->needs_cmd_parser && eb->batch_len;
}
static int eb_create(struct i915_execbuffer *eb) static int eb_create(struct i915_execbuffer *eb)
{ {
if (!(eb->args->flags & I915_EXEC_HANDLE_LUT)) { if (!(eb->args->flags & I915_EXEC_HANDLE_LUT)) {
...@@ -1159,6 +1164,10 @@ static u32 *reloc_gpu(struct i915_execbuffer *eb, ...@@ -1159,6 +1164,10 @@ static u32 *reloc_gpu(struct i915_execbuffer *eb,
if (unlikely(!cache->rq)) { if (unlikely(!cache->rq)) {
int err; int err;
/* If we need to copy for the cmdparser, we will stall anyway */
if (eb_use_cmdparser(eb))
return ERR_PTR(-EWOULDBLOCK);
err = __reloc_gpu_alloc(eb, vma, len); err = __reloc_gpu_alloc(eb, vma, len);
if (unlikely(err)) if (unlikely(err))
return ERR_PTR(err); return ERR_PTR(err);
...@@ -2293,7 +2302,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, ...@@ -2293,7 +2302,7 @@ i915_gem_do_execbuffer(struct drm_device *dev,
goto err_vma; goto err_vma;
} }
if (eb.engine->needs_cmd_parser && eb.batch_len) { if (eb_use_cmdparser(&eb)) {
struct i915_vma *vma; struct i915_vma *vma;
vma = eb_parse(&eb, drm_is_current_master(file)); vma = eb_parse(&eb, drm_is_current_master(file));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册