diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-20 06:04:22 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-20 06:04:22 -0400 |
| commit | 410532fb29d53d307cdd55fa0da5cf6f1d2faace (patch) | |
| tree | 113e4985615e337284bbb41f026bbc6bfeda090e /tools/guest-diag/sysc_shim.c | |
| parent | 720d3f5fa8b8bdbb947826927ae907cfc7d0ed56 (diff) | |
| download | open-iov-410532fb29d53d307cdd55fa0da5cf6f1d2faace.tar.gz open-iov-410532fb29d53d307cdd55fa0da5cf6f1d2faace.zip | |
vgsp: honor the C56F host-semaphore acquire (fix the streams2 readback-before-scale class)
Core CUDA starts each compute-channel push with a C56F SEM_EXECUTE
acquire method (five words [ADDR_LO][ADDR_HI][PAYLOAD_LO][PAYLOAD_HI]
[EXECUTE]; op 0/2/3/4/5 = acquire/equal, strict GEQ, circular GEQ,
AND, NOR). The decoder handled only op 1 (release) and 6 (reduction),
so every wait was ignored and a push's work could run ahead of the
dependency it waits on. Observed on streams2: the D2H readback push
carries ACQ_CIRC_GEQ on the channel progress counter (0x20400ffd0 >=
4, the 4th push = the scale launch); the readback executed before the
scale, and the client verified the pre-scale buffer (bad=32767, c2 =
a2+b2 without the x2).
Now the decoder records the acquire and svc_run_ops honors it before
running any of the push's work: satisfied (read + circular/equal/GEQ
compare) -> proceed; unsatisfied -> set op_tr_pending, so the entry is
held and its release withheld (bounded by SVC_OPDEF_HOLD_MS, loud) and
the re-decode runs the work once the counter advances. Unreadable
semaphore: fail-open (pre-r336 behaviour). New stat wait=held/pass.
Diffstat (limited to 'tools/guest-diag/sysc_shim.c')
0 files changed, 0 insertions, 0 deletions
