summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-22 00:18:40 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-22 00:18:40 -0400
commit4c6434dd36585b27757c7eaca4b7cb068c36695a (patch)
tree6a356e884b574a80ced1ec419747ed1a3cc55f27
parent6075628d72aae72e7ff4a882cb7ce28707ac220a (diff)
downloadopen-iov-4c6434dd36585b27757c7eaca4b7cb068c36695a.tar.gz
open-iov-4c6434dd36585b27757c7eaca4b7cb068c36695a.zip
r445b wedge hard re-arm trigger: the r445 battery shows every post-dispatch no-store episode leaves the warm ladder sem probe ALIVE (the ladder block runs; only the client launch no-writes), so the re-arm now fires on the FINAL no-write retry - TSG PREEMPT bWait=1 (forced context save/unload) + lane-enable/schedules re-run - before the last re-publish; default off
-rw-r--r--kernel/gsp_phys_booter.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c
index 83f7802..967dc25 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -20975,6 +20975,26 @@ gr_page_unmapped:
pr_info("vgsp-gr: outcome retry %u/%u (wrote=%u tracked=%u): refill + re-publish\n",
nw_attempts, nw_retries,
wrote, n_tracked);
+ /*
+ * r445 wedge hard re-arm (gsp_phys_gr_wedge_rearm,
+ * default off): the r445 evidence shows every
+ * post-dispatch no-store episode leaves the warm
+ * ladder sem probe ALIVE (the ladder block executes)
+ * while the client launch keeps writing nothing, so
+ * the plain refill+re-publish retries are futile.
+ * On the FINAL retry attempt, force one context
+ * save/unload (TSG PREEMPT bWait=1) and re-run the
+ * mode-35 lane-enable tail + schedules before the
+ * re-publish, so the retried launch meets a freshly
+ * restored context. Bounded: one preempt per launch
+ * (2 s RPC timeout), only on the last retry.
+ */
+ if (nw_attempts == nw_retries &&
+ gsp_phys_gr_wedge_rearm_value()) {
+ mutex_lock(&gsp_phys_rm_lock);
+ gsp_phys_gr_wedge_hard_rearm_locked(bar0);
+ mutex_unlock(&gsp_phys_rm_lock);
+ }
if (quiet_ms) {
gsp_phys_gr_wedge_quiet++;
pr_warn("vgsp-gr: WEDGE-QUIET hold %u ms before outcome retry %u (push=0x%llx; %u consecutive zero-write launch(es); no submissions in between)\n",
@@ -21020,16 +21040,6 @@ gr_page_unmapped:
mutex_lock(&gsp_phys_rm_lock);
sp_ret = gsp_phys_rmcall_gr_sem_push_locked(
bar0);
- /*
- * r445: on a proven wedge, attempt one
- * bounded preempt+resched hard re-arm
- * before giving up (default off).
- */
- if (sp_ret &&
- gsp_phys_gr_wedge_rearm_value())
- sp_ret =
- gsp_phys_gr_wedge_hard_rearm_locked(
- bar0);
mutex_unlock(&gsp_phys_rm_lock);
pr_info("vgsp-gr: outcome retry %u: warm sem push rc=%d (engine %s)\n",
nw_attempts, sp_ret,