diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-21 05:48:03 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-21 05:48:03 -0400 |
| commit | 4b5730e9baf1414effc5573a2164973605cf7c24 (patch) | |
| tree | 56ecf85acb86be1ca959c8da6164d0b53329074a | |
| parent | 0b307461d22a7bfa85d4ec87b80a0e5205fc3cd6 (diff) | |
| download | open-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.c | 13 |
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 |
