summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-24 12:07:00 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-24 12:07:00 -0400
commit35399ea4513daabe0ffd18443041e9aa45fe90bb (patch)
tree95dce2f90fcdbf42c3f1afef6a231da0a02f120c /kernel
parentc6c152ccc86c0796b626b8cd719e1352e7895996 (diff)
downloadopen-iov-35399ea4513daabe0ffd18443041e9aa45fe90bb.tar.gz
open-iov-35399ea4513daabe0ffd18443041e9aa45fe90bb.zip
vgsp-sema r619 diag: log the resolved target (pa/ap/src/rc/rb) of NON-pool device-VA semaphore writes - the r618 hung math client read 0 at 0x20480fef0 while the host's deferred releases advanced cur 97..105 on its own target; this makes the write-target divergence measurable (bounded 512/boot)
Diffstat (limited to 'kernel')
-rw-r--r--kernel/gsp_sema_service.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index cdb8067..3f50439 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -4181,6 +4181,7 @@ static int svc_sem_write(struct nv_vgpu_device *vgpu, u32 h, u64 va, u32 val)
int wap, rc;
bool verified = false;
bool rb_ok = false;
+ static u32 sem_sw_dev_log; /* r619: non-pool device-VA write budget */
/*
* Pool semaphores resolve pin -> verified cache -> targeted rm_mem
@@ -4240,10 +4241,21 @@ static int svc_sem_write(struct nv_vgpu_device *vgpu, u32 h, u64 va, u32 val)
* sysmem semaphore range (0x792..), with the resolver provenance and
* the read-back, so the second session's translations can be
* compared with the first session's for the same VA. Bounded.
- */
- if (va >= 0x79240000000ULL && va < 0x79260000000ULL &&
- svc.sem_sw_log < 8192) {
- svc.sem_sw_log++;
+ *
+ * r619 diag: the same proof for NON-pool device-VA writes (>= the VAS
+ * floor; e.g. 0x20480fef0 push releases, 0x204827f7c QMD releases).
+ * The r618 hung math client read 0 at 0x20480fef0 while the host's
+ * deferred releases logged `cur` 97..105 on its own target - a
+ * write-target divergence that was invisible because this range
+ * never printed `pa`. Bounded per boot (512).
+ */
+ if (((va >= 0x79240000000ULL && va < 0x79260000000ULL &&
+ svc.sem_sw_log < 8192) ||
+ (va >= SVC_VAS_FLOOR && !is_pool && sem_sw_dev_log < 512))) {
+ if (va >= 0x79240000000ULL && va < 0x79260000000ULL)
+ svc.sem_sw_log++;
+ else
+ sem_sw_dev_log++;
pr_info("sema-sw: h=0x%x va=0x%llx pa=0x%llx ap=%d src=%s val=0x%x rc=%d rb_ok=%d back=0x%x pool=%d\n",
h, va, addr, wap, src, val, rc, rb_ok, back, is_pool);
}