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