summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
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