[PATCH] drm/xe/guc: Fix uninitialised count in GuC load debug prints
Matt Roper
matthew.d.roper at intel.com
Fri May 24 22:51:56 UTC 2024
On Fri, May 24, 2024 at 01:26:03PM -0700, John.C.Harrison at Intel.com wrote:
> From: John Harrison <John.C.Harrison at Intel.com>
>
> The debug prints about how long the GuC load takes have a loop
> counter. However that was neither initialised nor incremented! Plus,
> counting loops is no longer meaningful given the wait function returns
> early for any change in the status value. So fix it to only count
> loops due to actual timeouts.
>
> Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
> Reported-by: kernel test robot <lkp at intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202405250151.IbH0l8FG-lkp@intel.com/
> Fixes: b0ac1b42dbdc ("drm/xe/guc: Port over the slow GuC loading support from i915")
> Cc: John Harrison <John.C.Harrison at Intel.com>
> Cc: Lucas De Marchi <lucas.demarchi at intel.com>
> Cc: Oded Gabbay <ogabbay at kernel.org>
> Cc: "Thomas Hellström" <thomas.hellstrom at linux.intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> Cc: Matthew Brost <matthew.brost at intel.com>
> Cc: Matt Roper <matthew.d.roper at intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Fei Yang <fei.yang at intel.com>
> Cc: intel-xe at lists.freedesktop.org
Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
> ---
> drivers/gpu/drm/xe/xe_guc.c | 16 +++++++++-------
> 1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
> index f7886c00af01..086a048876ba 100644
> --- a/drivers/gpu/drm/xe/xe_guc.c
> +++ b/drivers/gpu/drm/xe/xe_guc.c
> @@ -591,7 +591,7 @@ static void guc_wait_ucode(struct xe_guc *guc)
> ktime_t before, after, delta;
> int load_done;
> u32 status = 0;
> - int count;
> + int count = 0;
> u64 delta_ms;
> u32 before_freq;
>
> @@ -604,6 +604,7 @@ static void guc_wait_ucode(struct xe_guc *guc)
> */
> do {
> u32 last_status = status & (GS_UKERNEL_MASK | GS_BOOTROM_MASK);
> + int ret;
>
> /*
> * Wait for any change (intermediate or terminal) in the status register.
> @@ -612,9 +613,10 @@ static void guc_wait_ucode(struct xe_guc *guc)
> * timeouts rather than allowing a huge timeout each time. So basically, need
> * to treat a timeout no different to a value change.
> */
> - xe_mmio_wait32_not(gt, GUC_STATUS, GS_UKERNEL_MASK | GS_BOOTROM_MASK,
> - last_status, 1000 * 1000, &status, false);
> -
> + ret = xe_mmio_wait32_not(gt, GUC_STATUS, GS_UKERNEL_MASK | GS_BOOTROM_MASK,
> + last_status, 1000 * 1000, &status, false);
> + if (ret < 0)
> + count++;
> after = ktime_get();
> delta = ktime_sub(after, before);
> delta_ms = ktime_to_ms(delta);
> @@ -626,7 +628,7 @@ static void guc_wait_ucode(struct xe_guc *guc)
> if (delta_ms >= (GUC_LOAD_RETRY_LIMIT * 1000))
> break;
>
> - xe_gt_dbg(gt, "load still in progress, count = %d, freq = %dMHz (req %dMHz), status = 0x%08X [0x%02X/%02X]\n",
> + xe_gt_dbg(gt, "load still in progress, timeouts = %d, freq = %dMHz (req %dMHz), status = 0x%08X [0x%02X/%02X]\n",
> count, xe_guc_pc_get_act_freq(guc_pc),
> guc_pc_get_cur_freq(guc_pc), status,
> REG_FIELD_GET(GS_BOOTROM_MASK, status),
> @@ -678,13 +680,13 @@ static void guc_wait_ucode(struct xe_guc *guc)
>
> xe_device_declare_wedged(gt_to_xe(gt));
> } else if (delta_ms > GUC_LOAD_TIME_WARN_MS) {
> - xe_gt_warn(gt, "excessive init time: %lldms! [status = 0x%08X, count = %d]\n",
> + xe_gt_warn(gt, "excessive init time: %lldms! [status = 0x%08X, timeouts = %d]\n",
> delta_ms, status, count);
> xe_gt_warn(gt, "excessive init time: [freq = %dMHz (req = %dMHz), before = %dMHz, perf_limit_reasons = 0x%08X]\n",
> xe_guc_pc_get_act_freq(guc_pc), guc_pc_get_cur_freq(guc_pc),
> before_freq, xe_gt_throttle_get_limit_reasons(gt));
> } else {
> - xe_gt_dbg(gt, "init took %lldms, freq = %dMHz (req = %dMHz), before = %dMHz, status = 0x%08X, count = %d\n",
> + xe_gt_dbg(gt, "init took %lldms, freq = %dMHz (req = %dMHz), before = %dMHz, status = 0x%08X, timeouts = %d\n",
> delta_ms, xe_guc_pc_get_act_freq(guc_pc), guc_pc_get_cur_freq(guc_pc),
> before_freq, status, count);
> }
> --
> 2.43.2
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-xe
mailing list