summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-07 16:42:10 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-07 16:42:10 -0400
commitb50dbd98915d6557c165642298b06e017f96f64c (patch)
tree8281786740a55feee3579f42d5f75b6ca831ae79 /kernel/gsp_sema_service.c
parentd94b2896594771917e388231588fae34f921e226 (diff)
downloadopen-iov-b50dbd98915d6557c165642298b06e017f96f64c.tar.gz
open-iov-b50dbd98915d6557c165642298b06e017f96f64c.zip
vgsp: m120 - data-fill 32 pages/ptr under the 100 cap + rewrite hit/coverage logging + param 0x150 dump + main-PT slot dump
Diffstat (limited to 'kernel/gsp_sema_service.c')
-rw-r--r--kernel/gsp_sema_service.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index 830b1d7..0be279e 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -9560,8 +9560,12 @@ static bool svc_gr_page_inline_covers(u64 page)
* Per candidate pointer, map at most this many pages from the pointer's
* page onward (the engine-visible main-PT window has ~220 free 4 KB slots;
* the demo buffers are small on the native path).
+ * m120: lowered 64 -> 32 so every pointer page fits under the 100-page
+ * bounce cap (mail 2x32=64, vadd 3x32=96); at 64/ptr the second/third
+ * candidate run was truncated by the cap and its pointer word never
+ * rewritten (m119: first LDG base c[0x0][0x168] possibly untouched).
*/
-#define SVC_GR_DATA_PAGES_PER_PTR 64u
+#define SVC_GR_DATA_PAGES_PER_PTR 32u
/* m114: total pages the pre-commit bounce window can carry (slot 100 is
* the mail message). */
#define SVC_GR_DATA_BOUNCE_MAX 100u
@@ -9620,6 +9624,7 @@ static void svc_gr_data_fill(struct nv_vgpu_device *vgpu)
for (w = 0; w < n_cand; w++) {
u64 base = wins[w];
u32 p;
+ u32 before = svc_fwd_req.gr_n_data;
for (p = 0; p < SVC_GR_DATA_PAGES_PER_PTR; p++) {
u64 va = wins[w] + (u64)p * SEMA_PAGE_SIZE;
@@ -9636,8 +9641,12 @@ static void svc_gr_data_fill(struct nv_vgpu_device *vgpu)
continue; /* already mapped */
if (svc_resolve_va(vgpu, va, &pa, &ap))
break;
- if (svc_fwd_req.gr_n_data >= SVC_GR_DATA_BOUNCE_MAX)
+ if (svc_fwd_req.gr_n_data >= SVC_GR_DATA_BOUNCE_MAX) {
+ pr_info("vgsp-sema: svc-gr data fill: %u candidate ptrs, %u pages resolved (reloc 0x%llx+) CAP-HIT\n",
+ n_cand, svc_fwd_req.gr_n_data,
+ (u64)SVC_GR_DATA_RELOC_BASE);
return;
+ }
rec = &svc_fwd_req.gr_data[svc_fwd_req.gr_n_data];
rec->va = va;
rec->pa = pa & ~(u64)(SEMA_PAGE_SIZE - 1);
@@ -9647,6 +9656,9 @@ static void svc_gr_data_fill(struct nv_vgpu_device *vgpu)
svc_fwd_req.gr_n_data++;
}
(void)base;
+ pr_info("vgsp-sema: svc-gr candidate[%u] base=0x%llx -> %u new pages (total %u)\n",
+ w, base, svc_fwd_req.gr_n_data - before,
+ svc_fwd_req.gr_n_data);
}
pr_info("vgsp-sema: svc-gr data fill: %u candidate ptrs, %u pages resolved (reloc 0x%llx+)\n",
n_cand, svc_fwd_req.gr_n_data, (u64)SVC_GR_DATA_RELOC_BASE);