summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-21 05:48:03 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-21 05:48:03 -0400
commit4b5730e9baf1414effc5573a2164973605cf7c24 (patch)
tree56ecf85acb86be1ca959c8da6164d0b53329074a
parent0b307461d22a7bfa85d4ec87b80a0e5205fc3cd6 (diff)
downloadopen-iov-4b5730e9baf1414effc5573a2164973605cf7c24.tar.gz
open-iov-4b5730e9baf1414effc5573a2164973605cf7c24.zip
gr: r405 restore the no-write classifier input - propagate the tracked page total to the retire-wait out-param
ed91540a (r345) changed gsp_phys_gr_scan_pages to return the changed count and report the tracked total through an out-param, but the caller saved it into a local and never wrote *n_tracked. Every launch since reported n_tracked=0, so the caller gate (wrote == 0 && n_tracked) was never true: the first-attempt witness, the outcome re-execution retries (fresh qmdwin bank + release zeroing + re-publish), the NOWRITE accept with release-word restore, and the late-store check have all been dead code. The r404 forensics show the regression directly: 'RETIRE-WIT n_data=968 n_tracked=0' beside 'output retirement wait: 0/1032 pages changed (no writes)' for the same launch. Propagate n_all so the classifier fires again.
-rw-r--r--kernel/gsp_phys_booter.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c
index d01bcf3..01e0d12 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -17676,6 +17676,19 @@ gsp_phys_gr_output_retire_wait(const struct gsp_phys_gr_submit *req,
*/
(void)gsp_phys_gr_scan_pages(req, csum_in, &n_all, NULL);
/*
+ * r405: the r343 fix moved the tracked total from the out-param to
+ * the local n_all but FORGOT to write it back, so *n_tracked stayed
+ * 0 for every launch and the whole no-write classification chain in
+ * the caller (`wrote == 0 && n_tracked`: first-attempt witness,
+ * outcome retries, NOWRITE accept + release restore, late-store
+ * check) has been dead since ed91540a/r345 - the r404 forensics
+ * show "RETIRE-WIT n_data=968 n_tracked=0" while the same wait
+ * reports n_all=1032 in the "0/1032 pages changed (no writes)"
+ * line. Propagate the tracked total so the classifier can fire.
+ */
+ if (n_tracked)
+ *n_tracked = n_all;
+ /*
* RETIRE-WIT (r227): the r227 capture shows n_tracked far below the
* copy-in/copy-out rec counts for the same launch (4 tracked vs 1482
* written back) - either the rec array genuinely aliases reloc VAs