Commit 6e6bc8c0 authored by Ramalingam C's avatar Ramalingam C

drm/i915/gt: Optimize the migration and clear loop

Move the static calculations out of the loops for copy and clear.

v2:
  Fix the loss of proper error code on emit_pte
Signed-off-by: default avatarRamalingam C <ramalingam.c@intel.com>
Reviewed-by: default avatarThomas Hellstrom <thomas.hellstrom@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220405150840.29351-4-ramalingam.c@intel.com
parent a0ed9c95
...@@ -526,6 +526,7 @@ intel_context_migrate_copy(struct intel_context *ce, ...@@ -526,6 +526,7 @@ intel_context_migrate_copy(struct intel_context *ce,
struct i915_request **out) struct i915_request **out)
{ {
struct sgt_dma it_src = sg_sgt(src), it_dst = sg_sgt(dst); struct sgt_dma it_src = sg_sgt(src), it_dst = sg_sgt(dst);
u32 src_offset, dst_offset;
struct i915_request *rq; struct i915_request *rq;
int err; int err;
...@@ -535,8 +536,18 @@ intel_context_migrate_copy(struct intel_context *ce, ...@@ -535,8 +536,18 @@ intel_context_migrate_copy(struct intel_context *ce,
GEM_BUG_ON(ce->ring->size < SZ_64K); GEM_BUG_ON(ce->ring->size < SZ_64K);
src_offset = 0;
dst_offset = CHUNK_SZ;
if (HAS_64K_PAGES(ce->engine->i915)) {
src_offset = 0;
dst_offset = 0;
if (src_is_lmem)
src_offset = CHUNK_SZ;
if (dst_is_lmem)
dst_offset = 2 * CHUNK_SZ;
}
do { do {
u32 src_offset, dst_offset;
int len; int len;
rq = i915_request_create(ce); rq = i915_request_create(ce);
...@@ -564,17 +575,6 @@ intel_context_migrate_copy(struct intel_context *ce, ...@@ -564,17 +575,6 @@ intel_context_migrate_copy(struct intel_context *ce,
if (err) if (err)
goto out_rq; goto out_rq;
src_offset = 0;
dst_offset = CHUNK_SZ;
if (HAS_64K_PAGES(ce->engine->i915)) {
src_offset = 0;
dst_offset = 0;
if (src_is_lmem)
src_offset = CHUNK_SZ;
if (dst_is_lmem)
dst_offset = 2 * CHUNK_SZ;
}
len = emit_pte(rq, &it_src, src_cache_level, src_is_lmem, len = emit_pte(rq, &it_src, src_cache_level, src_is_lmem,
src_offset, CHUNK_SZ); src_offset, CHUNK_SZ);
if (len <= 0) { if (len <= 0) {
...@@ -690,6 +690,7 @@ intel_context_migrate_clear(struct intel_context *ce, ...@@ -690,6 +690,7 @@ intel_context_migrate_clear(struct intel_context *ce,
{ {
struct sgt_dma it = sg_sgt(sg); struct sgt_dma it = sg_sgt(sg);
struct i915_request *rq; struct i915_request *rq;
u32 offset;
int err; int err;
GEM_BUG_ON(ce->vm != ce->engine->gt->migrate.context->vm); GEM_BUG_ON(ce->vm != ce->engine->gt->migrate.context->vm);
...@@ -697,8 +698,11 @@ intel_context_migrate_clear(struct intel_context *ce, ...@@ -697,8 +698,11 @@ intel_context_migrate_clear(struct intel_context *ce,
GEM_BUG_ON(ce->ring->size < SZ_64K); GEM_BUG_ON(ce->ring->size < SZ_64K);
offset = 0;
if (HAS_64K_PAGES(ce->engine->i915) && is_lmem)
offset = CHUNK_SZ;
do { do {
u32 offset;
int len; int len;
rq = i915_request_create(ce); rq = i915_request_create(ce);
...@@ -726,10 +730,6 @@ intel_context_migrate_clear(struct intel_context *ce, ...@@ -726,10 +730,6 @@ intel_context_migrate_clear(struct intel_context *ce,
if (err) if (err)
goto out_rq; goto out_rq;
offset = 0;
if (HAS_64K_PAGES(ce->engine->i915) && is_lmem)
offset = CHUNK_SZ;
len = emit_pte(rq, &it, cache_level, is_lmem, offset, CHUNK_SZ); len = emit_pte(rq, &it, cache_level, is_lmem, offset, CHUNK_SZ);
if (len <= 0) { if (len <= 0) {
err = len; err = len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment