summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-23 22:25:03 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-23 22:25:03 -0400
commit1c147816c12d1ca85fd5092d417d503eb86c6476 (patch)
tree0d414593c6815ca007040ddc0d99c2f0eb79865e
parent7eb410a59fa94e69cd6332ed8bf862d58e7d0cee (diff)
downloadopen-iov-1c147816c12d1ca85fd5092d417d503eb86c6476.tar.gz
open-iov-1c147816c12d1ca85fd5092d417d503eb86c6476.zip
vgsp-gr r585: demand the fill's dropped pages through the pin channel (the staging-pin coverage class)
The r584 boot's matmul draw: GR-DEC push=0x20043be64 n_data=2 dropped=18 partial=1 stalled=1 -> the r543 argument defer expired -> r564 degenerate refusal -> SW completion -> MATMUL bad=65536 csum=0. The dropped pages (the client's staging buffers 0x71b662c00000/c40000/c80000, 0x7dd0cac00000, kind=a) had NO injected mapping: the host pin stream's demand loop only parses "stalled VA #N: 0x..." lines, and the GRFILL-DROP line format is invisible to it - so the fill's retries never saw pins and the launch was SW-completed without running. r585: svc_log_stalled_va() for each dropped page (up to the 4 detailed per episode; the helper dedups per boot and the episode marker bounds the rate). The host demand loop (<=3 s) then pushes the VA to the guest scanner, whose pin lands inside the launch's bounded defer window on the retry - the demand path that already heals every other unresolved-VA class, now connected to the fill drops.
-rw-r--r--kernel/gsp_sema_service.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index 6e0d88b..24cb034 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -20695,10 +20695,29 @@ static void svc_gr_data_fill(struct nv_vgpu_device *vgpu,
u32 dl;
svc_gr_drop_log_va = svc_fwd_req.gr_push_va;
- for (dl = 0; dl < 4 && dl < dropped_pages; dl++)
+ for (dl = 0; dl < 4 && dl < dropped_pages; dl++) {
+ /*
+ * r585: DEMAND the dropped pages through the
+ * pin channel. The host pin stream parses the
+ * "stalled VA #N: 0x..." lines (svc_log_stalled_va)
+ * and pushes each VA to the guest scanner within
+ * ~3 s, whose pin then lands inside the launch's
+ * bounded argument-defer window - the r584 matmul
+ * draw dropped 18 staging pages that were NEVER
+ * demanded (the GRFILL-DROP line format is
+ * invisible to the host's demand regex), the r543
+ * defer window expired, and the r564 degenerate
+ * refusal SW-completed a launch that wrote
+ * nothing (MATMUL bad=65536 csum=0). One demand
+ * per page per boot (svc_log_stalled_va dedups);
+ * one episode per launch push VA (the marker
+ * above).
+ */
+ svc_log_stalled_va(drop_va[dl]);
pr_info("vgsp-gr: GRFILL-DROP va=0x%llx kind=%c idx=%u\n",
drop_va[dl], drop_kind[dl],
drop_idx[dl]);
+ }
}
}
if (svc_gr_data_stalled)