diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-19 19:53:04 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-19 19:53:18 -0400 |
| commit | 79952c695ab929982a03996226ed180c2bbc58c7 (patch) | |
| tree | b06cc41c3b943ae24559d674b5a8ba0dfe50f640 /firmware | |
| parent | 550d14522bfa5ee75f15633073edc41a06a9a86f (diff) | |
| download | open-iov-79952c695ab929982a03996226ed180c2bbc58c7.tar.gz open-iov-79952c695ab929982a03996226ed180c2bbc58c7.zip | |
vgsp: fail4 - carry the channel into pending releases; hold the fence on denied passes
Two fixes for the cold-boot classes (CONT.60):
1) Pending releases starved forever: svc_apply_pending resolved the pool
semaphore with h=0, but the verified pool resolver is channel-keyed - it
never matched the per-channel pool entries while the very same lookup at
decode time succeeded (matmul r322: 'pool-rel cand ... rrc=0 cur=0' then
'pending release starved va=0x121000010 payload=1 tries=4/64...' forever,
the client hung and the boot died). Pending entries now record the channel
they were decoded for (struct svc_pending_release.h, set from svc.cur_ch
which svc_decode_stream stamps at its top) and svc_apply_pending resolves
with it. Also applies to the 'completion hint rc=-2' class.
2) The fence escaped on denied passes: in the P6b wave-2 overflow branch
the release was queued only when n_ops>0; a denied pass (n_ops==0) but
op-pending (a copy still owed) applied the release inline, letting the
driver refill the ping-pong staging before the copy ran - the cold-run
capture gap (vector_add run 1 bad=157696/193536). The queue condition is
now n_ops>0 || svc.op_tr_pending.
Measured (r323 fresh boot, full sequence): mail OK, nvidia-smi OK, matmul
OK (no death - the r322 killer), transformer OK (no stall), vector_add
cold-run bad=100352 (two chunks, down from 157696-193536; warm runs remain
bad=0).
Diffstat (limited to 'firmware')
0 files changed, 0 insertions, 0 deletions
