[PATCH v8 3/7] drm/xe: Return number of written dwords from workaround batch buffer emission
Tvrtko Ursulin
tvrtko.ursulin at igalia.com
Wed Jul 9 07:48:54 UTC 2025
On 08/07/2025 23:11, Lucas De Marchi wrote:
> On Thu, Jul 03, 2025 at 09:20:55AM +0100, Tvrtko Ursulin wrote:
>> 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 | 16 +++++++++++-----
>> 1 file changed, 11 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
>> index edd8751b164a..7f8911a10cc9 100644
>> --- a/drivers/gpu/drm/xe/xe_lrc.c
>> +++ b/drivers/gpu/drm/xe/xe_lrc.c
>> @@ -985,7 +985,8 @@ setup_bo(struct xe_lrc *lrc,
>> unsigned int offset,
>> const struct 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_bo(struct xe_lrc *lrc,
>> goto fail;
>>
>> cmd += len;
>> + if (written)
>> + *written += len;
>> }
>>
>> return cmd;
>> @@ -1026,13 +1029,14 @@ setup_bo(struct xe_lrc *lrc,
>> }
>>
>> static void
>> -finish_bo(struct xe_lrc *lrc, unsigned int offset, u32 *cmd, u32 *free)
>> +finish_bo(struct xe_lrc *lrc, unsigned int offset, 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);
>> }
>>
>> @@ -1042,16 +1046,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_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_bo(lrc, offset, cmd, buf);
>> + finish_bo(lrc, offset, written, buf);
>
> we should still have cmd in this call, right? But in the next patch the
> cmd should be gone as it's then unused.
No, it is already unused in this patch. Explicitly counting dwords
written replaced the "end - start" pointer arithmetic.
Regards,
Tvrtko
>
> Lucas De Marchi
>
>>
>> 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