summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-16 16:02:00 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-16 16:02:00 -0400
commitda9a755bd8841fca0f01199c99aeaa495a108da7 (patch)
treed7438afa25b84e11374f34d39424857690e7b237 /kernel/gsp_sema_service.c
parenta6947f6811568291b356c58bb8e63551fee9b689 (diff)
downloadopen-iov-da9a755bd8841fca0f01199c99aeaa495a108da7.tar.gz
open-iov-da9a755bd8841fca0f01199c99aeaa495a108da7.zip
vgsp: m160 reliability wave: fresh-ack outcome retries (zero release words, fresh qmdwin bank + rebuilt PB, restore-on-no-write), event-table slot reclaim (free-slot reuse + loud full log), GR capture trust for fresh plausibility-verified ring entries
Diffstat (limited to 'kernel/gsp_sema_service.c')
-rw-r--r--kernel/gsp_sema_service.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index 2019a35..c9c36b3 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -14414,6 +14414,37 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu)
!ch->engine_type &&
ch->gr_rehold_idx ==
(u32)idx;
+ /*
+ * m160: the capture gate used to
+ * require a host-injected pin. A
+ * fresh ring entry whose push read
+ * succeeded and whose bytes parse
+ * as a plausible method stream is
+ * the client's actual work - the
+ * same evidence the untrusted ops
+ * gate already accepts - and a GR
+ * capture built from it is exactly
+ * what the m156 rehold forces for
+ * deferred launches. Without this,
+ * a channel whose pages the pin
+ * stream had not reached yet (the
+ * streams2 second-channel case:
+ * entry consumed, no capture, the
+ * client read zeros) never gets
+ * its launch forwarded at all.
+ * Replays stay suppressed: a
+ * consumed entry must not run its
+ * work twice.
+ */
+ bool cap_trust = injected || rehold;
+
+ if (!cap_trust && !entry_replay &&
+ !ch->engine_type &&
+ gsp_phys_gr_forward_enabled() &&
+ !unreadable &&
+ svc_method_stream_plausible(pb,
+ len))
+ cap_trust = true;
svc_entry_outcome("decode", ch,
idx, va, len);
@@ -14426,7 +14457,7 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu)
ch,
idx,
va,
- injected || rehold,
+ cap_trust,
entry_replay && !rehold,
(entry_replay && !rehold) ?
NULL :