summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/gsp_sema_service.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index 02c100f..55482cd 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -1029,6 +1029,10 @@ struct sema_svc {
bool rebuild_now;
u32 gr_pending_map; /* GR-STALL-pending-map lines
* emitted (bounded proof) */
+ u32 gr_newbind_log; /* GR-STALL-newbind window-armed
+ * lines emitted (bounded proof) */
+ u32 gr_rebuild_log; /* GR-STALL-rebuild consumption
+ * lines emitted (bounded proof) */
u64 fwd_gr_hold_exp; /* GRFIX FIX1: data-stalled holds
* that reached the hard bound and
* were consumed with the software
@@ -17174,6 +17178,17 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu)
svc_opdef_drop_channel(vgpu, ch->h_object, jiffies);
ch->wd_newbind_until = jiffies +
msecs_to_jiffies(SVC_GR_NEWBIND_MS);
+ /*
+ * Bounded proof (r234 asks): the window was armed for
+ * THIS binding; if a later stall shows no such line,
+ * its binding never reached the pump (pre-registration
+ * class) and this mechanism cannot apply.
+ */
+ if (svc.gr_newbind_log < 16) {
+ svc.gr_newbind_log++;
+ pr_info("vgsp-gr: GR-STALL-newbind h=0x%x put=%u get=%u action=window reason=stale-entry-newbind\n",
+ ch->h_object, put, get);
+ }
if (put > 1) {
svc.gr_stale_wedge++;
pr_warn_ratelimited("vgsp-gr: GR-STALL-stale-wedge h=0x%x va=0x%llx last=%u put=%u get=%u sub=%llu waited_ms=0 action=recover reason=stale-entry-chanswitch reset=0 rewind=0 entry=0 cpa=0x%llx rpa=0x%llx\n",
@@ -19909,6 +19924,15 @@ static int svc_thread(void *arg)
*/
if (svc.rebuild_now) {
svc.rebuild_now = false;
+ /*
+ * Bounded proof (r234 asks): a pump-requested
+ * rebuild was actually consumed by the service
+ * thread here (the only consumer).
+ */
+ if (svc.gr_rebuild_log < 16) {
+ svc.gr_rebuild_log++;
+ pr_info("vgsp-gr: GR-STALL-rebuild consumed=1 by=svc_thread action=rebuild reason=stale-entry-newbind\n");
+ }
svc_rebuild(vgpu);
if (sess)
sess->last_build = svc.last_build;