summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-04 07:49:31 -0500
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-11-04 07:49:31 -0500
commit34cac6163d06ebd47e0e7336888fe3b84ce9c30f (patch)
tree9d6f3a5b0d21cfe87991f6ce2f00ad7e97a2d157 /kernel/gsp_sema_service.c
parent78b2ddd3ac93fc4db8769a0bb5def898ee3f3943 (diff)
downloadopen-iov-34cac6163d06ebd47e0e7336888fe3b84ce9c30f.tar.gz
open-iov-34cac6163d06ebd47e0e7336888fe3b84ce9c30f.zip
vgsp-mme: CONT-118 strict release + FE-busy deferral - sema_gl_mme_hold_strict (calls release only when pre_words_out==0 && fe_idle() && live_gen==pl_gen) and sema_gl_mme_fe_defer (busy-defer the load-only carrier at svc_gr_request before fill/consume, bounded 4 consecutive defers/gen with GIVEUP log) - both default 1, independent live A/B, 0 = legacy-equivalent
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 532f89d..64139f0 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -34201,6 +34201,26 @@ static bool svc_gr_request(struct nv_vgpu_device *vgpu,
return false;
}
/*
+ * r1445 5c: submit-side FE-busy deferral of the load-only carrier.
+ * A 0 return from the launch builder cannot express this (it is the
+ * block length and a zero-length block is never publishable), so the
+ * gate lives here, the same busy-defer shape as the prelude gate
+ * above: nothing is emitted or submitted, no release is authored,
+ * the candidate survives and the pump re-offers it. The predicate
+ * (gsp_phys_gr_mme_fe_defer_wanted) is the builder's own load-only
+ * decision plus the 0x400504 FE-idle read, bounded per generation so
+ * a never-idle FE falls back to the historical carrier.
+ */
+ if (svc_gr_cand.stream_3d &&
+ gsp_phys_gr_mme_fe_defer_wanted(ch->h_object,
+ svc_gr_cand.stream_n)) {
+ clear_bit_unlock(SVC_FWD_INFLIGHT, &svc_fwd_state);
+ mutex_unlock(&svc_fwd_lock);
+ svc_gr_busy_defer = true;
+ svc.fwd_gr_refused++;
+ return false;
+ }
+ /*
* SESSION 153-CONTINUED-62: the gate's fail-open edge (see
* gsp_sema_mme_immature_skip). Past the gate window a beef window
* whose macro program is STILL missing must not be forwarded - the