Skip to content

Commit

Permalink
drm/i915/gt: Optimize the migration and clear loop
Browse files Browse the repository at this point in the history
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: Ramalingam C <ramalingam.c@intel.com>
Reviewed-by: Thomas Hellstrom <thomas.hellstrom@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220405150840.29351-4-ramalingam.c@intel.com
  • Loading branch information
Ramalingam C committed Apr 14, 2022
1 parent a0ed9c9 commit 6e6bc8c
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions drivers/gpu/drm/i915/gt/intel_migrate.c
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,7 @@ intel_context_migrate_copy(struct intel_context *ce,
struct i915_request **out)
{
struct sgt_dma it_src = sg_sgt(src), it_dst = sg_sgt(dst);
u32 src_offset, dst_offset;
struct i915_request *rq;
int err;

Expand All @@ -535,8 +536,18 @@ intel_context_migrate_copy(struct intel_context *ce,

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 {
u32 src_offset, dst_offset;
int len;

rq = i915_request_create(ce);
Expand Down Expand Up @@ -564,17 +575,6 @@ intel_context_migrate_copy(struct intel_context *ce,
if (err)
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,
src_offset, CHUNK_SZ);
if (len <= 0) {
Expand Down Expand Up @@ -690,15 +690,19 @@ intel_context_migrate_clear(struct intel_context *ce,
{
struct sgt_dma it = sg_sgt(sg);
struct i915_request *rq;
u32 offset;
int err;

GEM_BUG_ON(ce->vm != ce->engine->gt->migrate.context->vm);
*out = NULL;

GEM_BUG_ON(ce->ring->size < SZ_64K);

offset = 0;
if (HAS_64K_PAGES(ce->engine->i915) && is_lmem)
offset = CHUNK_SZ;

do {
u32 offset;
int len;

rq = i915_request_create(ce);
Expand Down Expand Up @@ -726,10 +730,6 @@ intel_context_migrate_clear(struct intel_context *ce,
if (err)
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);
if (len <= 0) {
err = len;
Expand Down

0 comments on commit 6e6bc8c

Please sign in to comment.