[PATCH] drm/xe/xe_lrc: Fix context descriptors

Matt Roper matthew.d.roper at intel.com
Tue Nov 12 23:38:15 UTC 2024


On Tue, Nov 12, 2024 at 10:49:47PM +0000, Jonathan Cavitt wrote:
> The direct and indirect context descriptors in xe_lrc_snapshot have
> various problems:
> 
> - context_desc uses an incomplete 32-bit offset into the GGTT at which
>   the LRC resides.  This is not the same thing as the descriptor itself,
>   which is reported by the function xe_lrc_descriptor.
> 
> - indirect_context_desc currently only reports the indirect ring state,
>   as described at xe_lrc_indirect_ring_ggtt_addr.  The variable name
>   does not accurately reflect its purpose and should be changed.
> 
> Fix these issues.
> 
> Signed-off-by: Jonathan Cavitt <jonathan.cavitt at intel.com>
> CC: Matt Roper <matthew.d.roper at intel.com>
> CC: John Harrison <john.c.harrison at intel.com>
> ---
>  drivers/gpu/drm/xe/xe_lrc.c | 6 +++---
>  drivers/gpu/drm/xe/xe_lrc.h | 2 +-
>  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
> index 4b65da77c6e0..c280f46fbd75 100644
> --- a/drivers/gpu/drm/xe/xe_lrc.c
> +++ b/drivers/gpu/drm/xe/xe_lrc.c
> @@ -1635,8 +1635,8 @@ struct xe_lrc_snapshot *xe_lrc_snapshot_capture(struct xe_lrc *lrc)
>  	if (lrc->bo->vm)
>  		xe_vm_get(lrc->bo->vm);
>  
> -	snapshot->context_desc = xe_lrc_ggtt_addr(lrc);
> -	snapshot->indirect_context_desc = xe_lrc_indirect_ring_ggtt_addr(lrc);
> +	snapshot->context_desc = xe_lrc_descriptor(lrc);
> +	snapshot->indirect_ring_state = xe_lrc_indirect_ring_ggtt_addr(lrc);
>  	snapshot->head = xe_lrc_ring_head(lrc);
>  	snapshot->tail.internal = lrc->ring.tail;
>  	snapshot->tail.memory = xe_lrc_ring_tail(lrc);
> @@ -1694,7 +1694,7 @@ void xe_lrc_snapshot_print(struct xe_lrc_snapshot *snapshot, struct drm_printer
>  
>  	drm_printf(p, "\tHW Context Desc: 0x%08x\n", snapshot->context_desc);
>  	drm_printf(p, "\tHW Indirect Ring State: 0x%08x\n",
> -		   snapshot->indirect_context_desc);
> +		   snapshot->indirect_ring_state);
>  	drm_printf(p, "\tLRC Head: (memory) %u\n", snapshot->head);
>  	drm_printf(p, "\tLRC Tail: (internal) %u, (memory) %u\n",
>  		   snapshot->tail.internal, snapshot->tail.memory);
> diff --git a/drivers/gpu/drm/xe/xe_lrc.h b/drivers/gpu/drm/xe/xe_lrc.h
> index 40d8f6906d3e..c281bd690846 100644
> --- a/drivers/gpu/drm/xe/xe_lrc.h
> +++ b/drivers/gpu/drm/xe/xe_lrc.h
> @@ -25,7 +25,7 @@ struct xe_lrc_snapshot {
>  	unsigned long lrc_size, lrc_offset;
>  
>  	u32 context_desc;

We also need to change this to a u64 now that we're actually saving the
full 64-bit descriptor.


Matt

> -	u32 indirect_context_desc;
> +	u32 indirect_ring_state;
>  	u32 head;
>  	struct {
>  		u32 internal;
> -- 
> 2.43.0
> 

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation


More information about the Intel-xe mailing list