[PATCH v7 4/8] drm/xe: Return number of written dwords from workaround batch buffer emission
Tvrtko Ursulin
tvrtko.ursulin at igalia.com
Mon Jun 30 12:22:40 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 caller
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 | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index 7c7f6dae158c..5709c0c679af 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -985,7 +985,8 @@ setup_wa_bo(struct xe_lrc *lrc,
unsigned int offset,
const struct wa_bo_setup *funcs,
unsigned int num_funcs,
- u32 **free)
+ u32 **free,
+ unsigned int *written)
{
u32 *cmd, *buf = NULL;
ssize_t remain;
@@ -1016,6 +1017,8 @@ setup_wa_bo(struct xe_lrc *lrc,
goto fail;
cmd += len;
+ if (written)
+ *written += len;
}
return cmd;
@@ -1027,14 +1030,14 @@ setup_wa_bo(struct xe_lrc *lrc,
static void finish_wa_bo(struct xe_lrc *lrc,
unsigned int offset,
- u32 *cmd,
+ unsigned int written,
u32 *free)
{
if (!free)
return;
xe_map_memcpy_to(gt_to_xe(lrc->gt), &lrc->bo->vmap, offset, free,
- (cmd - free) * sizeof(*cmd));
+ written * sizeof(u32));
kfree(free);
}
@@ -1044,16 +1047,18 @@ static int setup_wa_bb(struct xe_lrc *lrc, struct xe_hw_engine *hwe)
{ .setup = setup_utilization_wa },
};
unsigned int offset = __xe_lrc_wa_bb_offset(lrc);
+ unsigned int written = 0;
u32 *cmd, *buf = NULL;
cmd = setup_wa_bo(lrc, hwe, LRC_WA_BB_SIZE, offset, funcs,
- ARRAY_SIZE(funcs), &buf);
+ ARRAY_SIZE(funcs), &buf, &written);
if (IS_ERR(cmd))
return PTR_ERR(cmd);
*cmd++ = MI_BATCH_BUFFER_END;
+ written++;
- finish_wa_bo(lrc, offset, cmd, buf);
+ finish_wa_bo(lrc, offset, written, buf);
xe_lrc_write_ctx_reg(lrc, CTX_BB_PER_CTX_PTR,
xe_bo_ggtt_addr(lrc->bo) + offset + 1);
--
2.48.0
More information about the Intel-xe
mailing list