diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-15 02:16:23 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-15 02:16:23 -0400 |
| commit | 4806384848c2903e921dfdefdc8096854e40480f (patch) | |
| tree | 7666f7bea596fbee5315790976acdf81dd85f5e1 | |
| parent | b6ab91d098328f940f51d02c4e9941cb1db8d74c (diff) | |
| download | open-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.c | 13 |
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; |
