diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/gsp_sema_service.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index b7290d4..e7c690b 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 @@ -17254,6 +17258,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", @@ -19989,6 +20004,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; |
