[PATCH] drm/i915/guc: Debug print LRC state entries only if the context is pinned
John Harrison
john.c.harrison at intel.com
Tue Jan 14 23:17:56 UTC 2025
On 1/9/2025 16:28, Daniele Ceraolo Spurio wrote:
> After the context is unpinned the backing memory can also be unpinned,
> so any accesses via the lrc_reg_state pointer can end up in unmapped
> memory. To avoid that, make sure to only access that memory if the
> context is pinned when printing its info.
>
> Fixes: 28ff6520a34d ("drm/i915/guc: Update GuC debugfs to support new GuC")
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
> Cc: John Harrison <John.C.Harrison at Intel.com>
> Cc: Matthew Brost <matthew.brost at intel.com>
> ---
>
> I believe this should fix issue #13343, but I wasn't able to repro
> the bug to confirm that it is indeed gone with this change.
>
> .../gpu/drm/i915/gt/uc/intel_guc_submission.c | 20 +++++++++++++------
> 1 file changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> index 12f1ba7ca9c1..22a73e2e6340 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> @@ -5519,12 +5519,20 @@ static inline void guc_log_context(struct drm_printer *p,
> {
> drm_printf(p, "GuC lrc descriptor %u:\n", ce->guc_id.id);
> drm_printf(p, "\tHW Context Desc: 0x%08x\n", ce->lrc.lrca);
> - drm_printf(p, "\t\tLRC Head: Internal %u, Memory %u\n",
> - ce->ring->head,
> - ce->lrc_reg_state[CTX_RING_HEAD]);
> - drm_printf(p, "\t\tLRC Tail: Internal %u, Memory %u\n",
> - ce->ring->tail,
> - ce->lrc_reg_state[CTX_RING_TAIL]);
> + if (intel_context_pin_if_active(ce)) {
> + drm_printf(p, "\t\tLRC Head: Internal %u, Memory %u\n",
> + ce->ring->head,
> + ce->lrc_reg_state[CTX_RING_HEAD]);
> + drm_printf(p, "\t\tLRC Tail: Internal %u, Memory %u\n",
> + ce->ring->tail,
> + ce->lrc_reg_state[CTX_RING_TAIL]);
> + intel_context_unpin(ce);
> + } else {
> + drm_printf(p, "\t\tLRC Head: Internal %u, Memory not pinned\n",
> + ce->ring->head);
> + drm_printf(p, "\t\tLRC Tail: Internal %u, Memory not pinned\n",
> + ce->ring->tail);
> + }
> drm_printf(p, "\t\tContext Pin Count: %u\n",
> atomic_read(&ce->pin_count));
> drm_printf(p, "\t\tGuC ID Ref Count: %u\n",
Looks good except for the whitespace alignment issue that checkpatch is
complaining about. With that fixed:
Reviewed-by: John Harrison <John.C.Harrison at Intel.com>
More information about the Intel-gfx
mailing list