From 4b5730e9baf1414effc5573a2164973605cf7c24 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Wed, 21 Oct 2026 05:48:03 -0400 Subject: 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. --- kernel/gsp_phys_booter.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'kernel/gsp_phys_booter.c') 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 @@ -17675,6 +17675,19 @@ gsp_phys_gr_output_retire_wait(const struct gsp_phys_gr_submit *req, * rule below becomes the real settle bound. */ (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 -- cgit v1.2.3