]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: Track number of written dwords from workaround batch buffer emission
authorTvrtko Ursulin <tvrtko.ursulin@igalia.com>
Fri, 11 Jul 2025 16:01:49 +0000 (17:01 +0100)
committerLucas De Marchi <lucas.demarchi@intel.com>
Mon, 14 Jul 2025 15:06:14 +0000 (08:06 -0700)
Indirect context setup will need to get to the number of written dwords.
Lets add it as an output parameter so it can be accessed from the finish
helper regardless of whether code is writing directly or via an shadow
buffer.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://lore.kernel.org/r/20250711160153.49833-5-tvrtko.ursulin@igalia.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/xe_lrc.c

index bd5dde28fa4bdafb8a96a512b4f73b140af3ece4..16921605fa6d9150ddc8d3f271caf91cbc08e653 100644 (file)
@@ -991,6 +991,7 @@ struct bo_setup_state {
        /* State: */
        u32                     *buffer;
        u32                     *ptr;
+       unsigned int            written;
 };
 
 static int setup_bo(struct bo_setup_state *state)
@@ -1023,6 +1024,7 @@ static int setup_bo(struct bo_setup_state *state)
                        goto fail;
 
                state->ptr += len;
+               state->written += len;
        }
 
        return 0;
@@ -1039,7 +1041,7 @@ static void finish_bo(struct bo_setup_state *state)
 
        xe_map_memcpy_to(gt_to_xe(state->lrc->gt), &state->lrc->bo->vmap,
                         state->offset, state->buffer,
-                        (state->ptr - state->buffer) * sizeof(u32));
+                        state->written * sizeof(u32));
        kfree(state->buffer);
 }
 
@@ -1063,6 +1065,7 @@ static int setup_wa_bb(struct xe_lrc *lrc, struct xe_hw_engine *hwe)
                return ret;
 
        *state.ptr++ = MI_BATCH_BUFFER_END;
+       state.written++;
 
        finish_bo(&state);