[PATCH v9 4/8] drm/xe: Track number of written dwords from workaround batch buffer emission

Tvrtko Ursulin tvrtko.ursulin at igalia.com
Wed Jul 9 10:54:51 UTC 2025


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 at igalia.com>
Cc: Lucas De Marchi <lucas.demarchi at intel.com>
---
 drivers/gpu/drm/xe/xe_lrc.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index 5d5b76f16829..229cfde91799 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -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);
 
-- 
2.48.0



More information about the Intel-xe mailing list