summaryrefslogtreecommitdiffstats
path: root/kernel
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 /kernel
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).
Diffstat (limited to 'kernel')
-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;