summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-15 02:16:23 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-15 02:16:23 -0400
commit4806384848c2903e921dfdefdc8096854e40480f (patch)
tree7666f7bea596fbee5315790976acdf81dd85f5e1
parentb6ab91d098328f940f51d02c4e9941cb1db8d74c (diff)
downloadopen-iov-4806384848c2903e921dfdefdc8096854e40480f.tar.gz
open-iov-4806384848c2903e921dfdefdc8096854e40480f.zip
vgsp-gr: retirement wait - exclude every forwarded page from the footprint
r150's first cut excluded only QMD-word pages; the fill also relocates the 0xffffffff (non-QMD) forwarded pages (pushbuffer/indirect/bank pages) as high-VA candidates, so out_base landed on the bank-page group, out_pages came out 3 and the wait exited after 72 ms - losing the late-write capture it exists for (smiley r150: '0/3 pages changed after 72 ms (no writes)' followed by mixed 8-changed/0-changed/32-changed copy-outs and one wrong pass). Now every forwarded page VA is excluded, so the footprint is the real output operand (32 pages for smiley, 64 for matmul).
-rw-r--r--kernel/gsp_phys_booter.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c
index f603c10..bc312b0 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -16634,9 +16634,15 @@ gsp_phys_gr_output_retire_wait(const struct gsp_phys_gr_submit *req,
u32 pj;
bool launch_page = false;
+ /*
+ * Exclude EVERY forwarded launch page - including the
+ * 0xffffffff (non-QMD) ones (pushbuffer/indirect/bank pages
+ * the fill also relocates as high-VA candidates). r150
+ * excluded only the QMD pages and out_base landed on the
+ * 0x1d9000 bank page group: out_pages=3, the wait exited
+ * after 72 ms and the late-write capture was lost.
+ */
for (pj = 0; pj < req->n_pages; pj++) {
- if (req->pages[pj].qmd_word == 0xffffffffu)
- continue;
if (req->pages[pj].guest_va == req->data[di].va) {
launch_page = true;
break;
@@ -16663,9 +16669,6 @@ gsp_phys_gr_output_retire_wait(const struct gsp_phys_gr_submit *req,
bool lp = false;
for (pj = 0; pj < req->n_pages; pj++) {
- if (req->pages[pj].qmd_word ==
- 0xffffffffu)
- continue;
if (req->pages[pj].guest_va ==
req->data[k].va) {
lp = true;