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.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index 6d72a62..26d3b1a 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -50031,15 +50031,19 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu)
/*
* Saved-window release carrier (sema_gl_mme_pack_release). After the
- * channel loop (a client window decoded in this pass wins and cancels
- * the pending release), fire the saved held-call window once the pack
- * completed and the settle grace expired. Same gates as the
- * continuation carrier, except the FE-busy defer (this launch carries
- * a real window, not a LOAD-ONLY carrier).
+ * channel loop (so a client window decoded in this pass is offered
+ * first), re-arm the saved held-call window if a race left the record
+ * valid but disarmed, then fire it once the pack completed and the
+ * settle grace expired. Same gates as the continuation carrier, except
+ * the FE-busy defer (this launch carries a real window, not a
+ * LOAD-ONLY carrier). A real client window never cancels the release:
+ * only the MME-PACK-REARM edge (calls actually released) does.
*/
{
u32 rel_h = 0;
+ bool found = false;
+ gsp_phys_gr_mme_release_rearm();
if (gsp_phys_gr_mme_release_peek(&rel_h)) {
int ci;
@@ -50048,14 +50052,25 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu)
if (c->h_object != rel_h || c->engine_type)
continue;
- if (svc_gr_cand_unoffered_for(rel_h))
+ found = true;
+ if (svc_gr_cand_unoffered_for(rel_h)) {
+ pr_info_ratelimited("vgsp-gr: MME-CARRY-HOLD reason=client-candidate h=0x%x\n",
+ rel_h);
break;
+ }
if (svc_fwd_hold.active ||
- test_bit(SVC_FWD_INFLIGHT, &svc_fwd_state))
+ test_bit(SVC_FWD_INFLIGHT,
+ &svc_fwd_state)) {
+ pr_info_ratelimited("vgsp-gr: MME-CARRY-HOLD reason=request-inflight h=0x%x\n",
+ rel_h);
break;
+ }
(void)svc_gr_carrier_request(vgpu, c, true);
break;
}
+ if (!found)
+ pr_info_ratelimited("vgsp-gr: MME-CARRY-HOLD reason=no-channel h=0x%x\n",
+ rel_h);
}
}