]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/guc: Wait before retrying sending H2G
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Tue, 27 Jan 2026 19:37:25 +0000 (20:37 +0100)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Mon, 2 Feb 2026 21:35:45 +0000 (22:35 +0100)
We shall resend H2G message after receiving NO_RESPONSE_RETRY reply,
but since GuC dropped that H2G due to some interim state, we should
give it a little time to stabilize. Wait before sending the same H2G
again, start with 1ms delay, then increase exponentially to 256ms.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patch.msgid.link/20260127193727.601-6-michal.wajdeczko@intel.com
drivers/gpu/drm/xe/xe_guc.c

index 2ae5a78b52ed9d642401e88acfbc42b253623083..6cc778e7cb575c3a0dd73cc88fd4f06b0f9fdbc4 100644 (file)
@@ -40,6 +40,7 @@
 #include "xe_memirq.h"
 #include "xe_mmio.h"
 #include "xe_platform_types.h"
+#include "xe_sleep.h"
 #include "xe_sriov.h"
 #include "xe_sriov_pf_migration.h"
 #include "xe_uc.h"
@@ -1408,6 +1409,7 @@ int xe_guc_mmio_send_recv(struct xe_guc *guc, const u32 *request,
        struct xe_reg reply_reg = xe_gt_is_media_type(gt) ?
                MED_VF_SW_FLAG(0) : VF_SW_FLAG(0);
        const u32 LAST_INDEX = VF_SW_FLAG_COUNT - 1;
+       unsigned int sleep_period_ms = 1;
        bool lost = false;
        u32 header;
        int ret;
@@ -1490,6 +1492,8 @@ timeout:
 
                xe_gt_dbg(gt, "GuC mmio request %#x: retrying, reason %#x\n",
                          request[0], reason);
+
+               xe_sleep_exponential_ms(&sleep_period_ms, 256);
                goto retry;
        }