diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-15 16:33:36 -0500 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-11-15 16:33:36 -0500 |
| commit | 6aeb20c735a4ff49f86c8a63df700af6108cad7f (patch) | |
| tree | b92e10fef63c8dccef3048cde7e314cd33019e52 /kernel/gsp_phys_booter.c | |
| parent | a03a68ea5d8c7d81026160db9ee1c27c6f25df14 (diff) | |
| download | open-iov-6aeb20c735a4ff49f86c8a63df700af6108cad7f.tar.gz open-iov-6aeb20c735a4ff49f86c8a63df700af6108cad7f.zip | |
vgsp: eng64 - chain the release behind the pack carrier and name a stalled carrier's gate
c779: the pack-continuation carrier completed the pack
(MME-CARRY-COMPLETE gen=4 off=2799/2799) and armed the release
(MME-CARRY-ARM mode=release), but its launch poll held the single
forwarding slot for 2801 ms; the armed release then deferred
request-inflight until the beef channel unregistered at +2.2 s, so the
release ended in MME-CARRY-HOLD reason=no-channel.
- svc_fwd_gr_work: after a successful synthetic pack carrier, wait out
the release grace in the same slot, claim it and run the release work
directly (chained MME-CARRY-FIRE mode=release ... receipt). Gate:
sema_gl_mme_release_chain (default 1; release carrier still default 0).
- pump pack-carry block: an armed due carrier that cannot go out now
names its blocker (MME-CARRY-WAIT reason=no-channel/client-candidate/
request-inflight/fe-defer), so the c781-class silent stall is visible.
- booter: gsp_phys_gr_mme_release_waiting()/chain_enabled() helpers.
c783-c785 (a03a68ea build) were all shallow (author=0, no MME window).
Diffstat (limited to 'kernel/gsp_phys_booter.c')
| -rw-r--r-- | kernel/gsp_phys_booter.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c index 4cf1c55..74b0300 100644 --- a/kernel/gsp_phys_booter.c +++ b/kernel/gsp_phys_booter.c @@ -19011,6 +19011,23 @@ MODULE_PARM_DESC(sema_gl_mme_release_sa_arm, "Re-emit the START-ADDRESS RAM pairs (incl. golden slot 34 -> IR 0x265) before a saved-window release launch so CALL_MME_MACRO(34) resolves to DRAW_IAB (default 0; needs sema_gl_mme_pack_release=1)"); /* + * Release chaining (sema_gl_mme_release_chain): the host pack-continuation + * carrier's launch poll owns the single forwarding slot for up to + * sema_mme_fast_ms (c779 elapsed 2801 ms), and the client's 3D channel can + * unregister before the next service pass fires the armed release (c779: + * release ARM at +0.1 s, beef channel unregistered ~2.2 s later -> + * MME-CARRY-HOLD reason=no-channel). With this on, a successful synthetic + * pack carrier claims the armed release after its settle grace and runs the + * release work in the same slot, while the channel is still alive. Default 1; + * the release carrier itself is default off. + */ +static bool gsp_phys_rmcall_gr_mme_release_chain = true; +module_param_named(sema_gl_mme_release_chain, + gsp_phys_rmcall_gr_mme_release_chain, bool, 0644); +MODULE_PARM_DESC(sema_gl_mme_release_chain, + "Run the armed saved-window release in the same forwarding slot right after a successful host pack-continuation carrier (default 1; needs sema_gl_mme_pack_release=1)"); + +/* * DRAW_IAB preference (release carrier follow-up): the held-call window that * matters is the DRAW window, whose method stream carries the * CALL_MME_MACRO(34) run that expands to DRAW_IAB (mac=0x22). @@ -19470,6 +19487,24 @@ bool gsp_phys_gr_mme_release_take(u32 h_object, u32 *held, u32 *win) return true; } +/* An armed release is still owed (before its grace deadline too). */ +bool gsp_phys_gr_mme_release_waiting(void) +{ + struct gsp_phys_gr_mme_release_state *s = &gsp_phys_gr_mme_release; + unsigned long flags; + bool waiting; + + spin_lock_irqsave(&gsp_phys_gr_mme_release_lock, flags); + waiting = s->valid && s->armed && !s->fired && !s->consumed; + spin_unlock_irqrestore(&gsp_phys_gr_mme_release_lock, flags); + return waiting; +} + +bool gsp_phys_gr_mme_release_chain_enabled(void) +{ + return READ_ONCE(gsp_phys_rmcall_gr_mme_release_chain); +} + /* The release is still claimed and not cancelled (builder safety gate). */ static bool gsp_phys_gr_mme_release_active(void) { |
