summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-23 15:25:51 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-23 15:25:51 -0400
commit4094a7ea7e8ed92f323e856fcac3717df0f4b401 (patch)
treecc228438c2d4552c30c57b947ea1583433ac4c9a /kernel/gsp_sema_service.c
parent1b73a33cd440f556567f566c9a066869695203f7 (diff)
downloadopen-iov-4094a7ea7e8ed92f323e856fcac3717df0f4b401.tar.gz
open-iov-4094a7ea7e8ed92f323e856fcac3717df0f4b401.zip
vgsp-sema r558: the opdef hold path honors the absolute per-launch bound
r557 STALL-DUMP evidence (victory_matmul): "no GPFIFO entry consumed for 20s" repeated while opdef=3880/16/64 and held=155 climbed - the pump froze on one held entry whose operand never resolved, re-holding it every pass. The opdef hold was the only pump hold path without the absolute per-launch-VA bound (svc_gr_hold_bound_expired, the r509 one-shot used by every GR hold path); it could therefore extend indefinitely through fresh slot allocations even though each individual slot window is 3 s. Consult the same absolute bound before holding: once it fires the entry flushes its withheld releases and is consumed, so no operand-pending entry can freeze the pump's entry loop.
Diffstat (limited to 'kernel/gsp_sema_service.c')
-rw-r--r--kernel/gsp_sema_service.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index a3366ba..d3a7e31 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -22649,7 +22649,27 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu)
* data), so the hold and the
* deferral move together.
*/
+ /*
+ * r558: the opdef hold is the one
+ * pump hold path without the
+ * absolute per-launch bound. r557
+ * STALL-DUMP evidence: the pump
+ * consumed NOTHING for 20+ s while
+ * held/opdef counters climbed
+ * (opdef=3880/16/64, held=155) -
+ * a held entry whose operand never
+ * resolves was re-held every pass
+ * and the whole pump froze on it.
+ * Consult the same absolute
+ * per-launch-VA bound the GR hold
+ * paths use (svc_gr_hold_bound_
+ * expired, one-shot r509): once it
+ * fires the entry flushes and is
+ * consumed instead of held again.
+ */
if (svc.op_tr_pending &&
+ !svc_gr_hold_bound_expired(ch,
+ svc_gr_launch_va(ch)) &&
svc_opdef_hold(vgpu, ch,
(u32)idx,
va)) {