From 4f648aba4706af53e746e093ed8137771d947fe1 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Fri, 23 Oct 2026 21:06:53 -0400 Subject: vgsp-sema r581: do not pay the translation grace for provably-foreign rescued content r577's foreign-release gate made unreadable entries take the !rel_seen path, where each entry pays the full ce_grace_ms hold before the exact-slot fallback delivers its pool step ('skipping stale entry ... after 8000 ms grace' every ~8 s on the r577/r580 boots; a client's init crawls for minutes). When the rescue decoded a release but the gate refused it as a tracking slot, the content is provably stale/foreign: no work may run from it (rescued work is never executed anyway) and the 8 s wait buys only the small chance that the real page lands inside the window. Backdate defer_since so the consume path delivers the pool step immediately; the translation grace still applies to entries whose rescue decoded nothing (their content may still be the real push). --- kernel/gsp_sema_service.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'kernel/gsp_sema_service.c') diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c index 4fd160e..741fdc2 100644 --- a/kernel/gsp_sema_service.c +++ b/kernel/gsp_sema_service.c @@ -23706,6 +23706,31 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu) (!ch->engine_type || svc_pool_sem_va(svc_rel_va_seen)); } + /* + * r581: the rescue decoded a + * release but the r577 gate + * refused it as a tracking slot + * (rel_seen false while the + * counter moved) - the content + * is provably stale/foreign, no + * work may run from it, and + * waiting the 8 s translation + * grace per entry crawls the + * client's init for minutes + * (r577/r580 boots: 'skipping + * stale entry ... after 8000 ms + * grace' every ~8 s). Backdate + * the deferral so the consume + * path delivers the pool step + * through the exact-slot + * fallback immediately. + */ + if (!rel_seen && + svc_rel_count != rel_n2 && + ch->engine_type && + ch->expected_sem_payload) + ch->defer_since = jiffies - + msecs_to_jiffies(gsp_sema_ce_grace_ms + 100); } } if (rel_seen) { @@ -23736,6 +23761,7 @@ static void svc_pump_channels(struct nv_vgpu_device *vgpu) ch->unread_va = 0; ch->unread_until = 0; } + ch->submissions++; svc.gpfifo_entries_done++; if (ch->engine_type && ch->expected_sem_payload) { -- cgit v1.2.3